Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,9 @@
<PackageVersion Include="FluentMigrator" Version="7.2.0"/>
<PackageVersion Include="FluentMigrator.Runner" Version="7.2.0"/>
<PackageVersion Include="FluentMigrator.Runner.Core" Version="7.2.0"/>
<PackageVersion Include="FluentMigrator.Runner.MySql" Version="7.2.0"/>
<PackageVersion Include="FluentMigrator.Runner.Oracle" Version="7.2.0"/>
<PackageVersion Include="FluentMigrator.Runner.Postgres" Version="7.2.0"/>
<PackageVersion Include="FluentMigrator.Runner.SqlServer" Version="7.2.0"/>
<PackageVersion Include="FluentMigrator.Runner.SQLite" Version="7.2.0"/>
<PackageVersion Include="FluentStorage" Version="6.0.0"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@
<PackageReference Include="FluentMigrator" />
</ItemGroup>

<ItemGroup>
<InternalsVisibleTo Include="Elsa.Persistence.Dapper.UnitTests" />
</ItemGroup>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -12,82 +12,87 @@ public class Initial : Migration
/// <inheritdoc />
public override void Up()
{
IfDatabase("SqlServer", "Oracle", "MySql", "Postgres")
.Create
.Table("WorkflowDefinitions")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("ToolVersion").AsString().Nullable()
.WithColumn("Description").AsString(MaxValue).Nullable()
.WithColumn("ProviderName").AsString().Nullable()
.WithColumn("MaterializerName").AsString().NotNullable()
.WithColumn("MaterializerContext").AsString(MaxValue).Nullable()
.WithColumn("Props").AsString(MaxValue).NotNullable()
.WithColumn("UsableAsActivity").AsBoolean().Nullable()
.WithColumn("StringData").AsString(MaxValue).Nullable()
.WithColumn("BinaryData").AsBinary(MaxValue).Nullable()
.WithColumn("CreatedAt").AsDateTimeOffset().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("IsLatest").AsBoolean().NotNullable()
.WithColumn("IsReadonly").AsBoolean().NotNullable()
.WithColumn("IsPublished").AsBoolean().NotNullable();

if (!Schema.Table("WorkflowDefinitions").Exists())
{
IfDatabase(MigrationDatabases.DateTimeOffsetProviders)
.Create
.Table("WorkflowDefinitions")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("ToolVersion").AsString().Nullable()
.WithColumn("Description").AsString(MaxValue).Nullable()
.WithColumn("ProviderName").AsString().Nullable()
.WithColumn("MaterializerName").AsString().NotNullable()
.WithColumn("MaterializerContext").AsString(MaxValue).Nullable()
.WithColumn("Props").AsString(MaxValue).NotNullable()
.WithColumn("UsableAsActivity").AsBoolean().Nullable()
.WithColumn("StringData").AsString(MaxValue).Nullable()
.WithColumn("BinaryData").AsBinary(MaxValue).Nullable()
.WithColumn("CreatedAt").AsDateTimeOffset().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("IsLatest").AsBoolean().NotNullable()
.WithColumn("IsReadonly").AsBoolean().NotNullable()
.WithColumn("IsPublished").AsBoolean().NotNullable();

IfDatabase("Sqlite")
.Create
.Table("WorkflowDefinitions")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("ToolVersion").AsString().Nullable()
.WithColumn("Description").AsString(MaxValue).Nullable()
.WithColumn("ProviderName").AsString().Nullable()
.WithColumn("MaterializerName").AsString().NotNullable()
.WithColumn("MaterializerContext").AsString().Nullable()
.WithColumn("Props").AsString(MaxValue).NotNullable()
.WithColumn("UsableAsActivity").AsBoolean().Nullable()
.WithColumn("StringData").AsString(MaxValue).Nullable()
.WithColumn("BinaryData").AsBinary(MaxValue).Nullable()
.WithColumn("CreatedAt").AsDateTime2().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("IsLatest").AsBoolean().NotNullable()
.WithColumn("IsReadonly").AsBoolean().NotNullable()
.WithColumn("IsPublished").AsBoolean().NotNullable();
IfDatabase("Sqlite")
.Create
.Table("WorkflowDefinitions")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("ToolVersion").AsString().Nullable()
.WithColumn("Description").AsString(MaxValue).Nullable()
.WithColumn("ProviderName").AsString().Nullable()
.WithColumn("MaterializerName").AsString().NotNullable()
.WithColumn("MaterializerContext").AsString().Nullable()
.WithColumn("Props").AsString(MaxValue).NotNullable()
.WithColumn("UsableAsActivity").AsBoolean().Nullable()
.WithColumn("StringData").AsString(MaxValue).Nullable()
.WithColumn("BinaryData").AsBinary(MaxValue).Nullable()
.WithColumn("CreatedAt").AsDateTime2().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("IsLatest").AsBoolean().NotNullable()
.WithColumn("IsReadonly").AsBoolean().NotNullable()
.WithColumn("IsPublished").AsBoolean().NotNullable();
}

IfDatabase("SqlServer", "Oracle", "MySql", "Postgres")
.Create
.Table("WorkflowInstances")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("DefinitionVersionId").AsString().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("WorkflowState").AsString(MaxValue).NotNullable()
.WithColumn("Status").AsString().NotNullable()
.WithColumn("SubStatus").AsString().NotNullable()
.WithColumn("CorrelationId").AsString().Nullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("IncidentCount").AsInt32().NotNullable()
.WithColumn("CreatedAt").AsDateTimeOffset().NotNullable()
.WithColumn("UpdatedAt").AsDateTimeOffset().Nullable()
.WithColumn("FinishedAt").AsDateTimeOffset().Nullable();
if (!Schema.Table("WorkflowInstances").Exists())
{
IfDatabase(MigrationDatabases.DateTimeOffsetProviders)
.Create
.Table("WorkflowInstances")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("DefinitionVersionId").AsString().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("WorkflowState").AsString(MaxValue).NotNullable()
.WithColumn("Status").AsString().NotNullable()
.WithColumn("SubStatus").AsString().NotNullable()
.WithColumn("CorrelationId").AsString().Nullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("IncidentCount").AsInt32().NotNullable()
.WithColumn("CreatedAt").AsDateTimeOffset().NotNullable()
.WithColumn("UpdatedAt").AsDateTimeOffset().Nullable()
.WithColumn("FinishedAt").AsDateTimeOffset().Nullable();

IfDatabase("Sqlite")
.Create
.Table("WorkflowInstances")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("DefinitionVersionId").AsString().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("WorkflowState").AsString(MaxValue).NotNullable()
.WithColumn("Status").AsString().NotNullable()
.WithColumn("SubStatus").AsString().NotNullable()
.WithColumn("CorrelationId").AsString().Nullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("IncidentCount").AsInt32().NotNullable()
.WithColumn("CreatedAt").AsDateTime2().NotNullable()
.WithColumn("UpdatedAt").AsDateTime2().Nullable()
.WithColumn("FinishedAt").AsDateTime2().Nullable();
IfDatabase("Sqlite")
.Create
.Table("WorkflowInstances")
.WithColumn("Id").AsString().PrimaryKey()
.WithColumn("DefinitionId").AsString().NotNullable()
.WithColumn("DefinitionVersionId").AsString().NotNullable()
.WithColumn("Version").AsInt32().NotNullable()
.WithColumn("WorkflowState").AsString(MaxValue).NotNullable()
.WithColumn("Status").AsString().NotNullable()
.WithColumn("SubStatus").AsString().NotNullable()
.WithColumn("CorrelationId").AsString().Nullable()
.WithColumn("Name").AsString().Nullable()
.WithColumn("IncidentCount").AsInt32().NotNullable()
.WithColumn("CreatedAt").AsDateTime2().NotNullable()
.WithColumn("UpdatedAt").AsDateTime2().Nullable()
.WithColumn("FinishedAt").AsDateTime2().Nullable();
}
}

/// <inheritdoc />
Expand All @@ -96,4 +101,4 @@ public override void Down()
Delete.Table("WorkflowDefinitions");
Delete.Table("WorkflowInstances");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
namespace Elsa.Persistence.Dapper.Migrations;

/// <summary>
/// Provider names passed to FluentMigrator's alias-aware <c>IfDatabase(params string[])</c> overload.
/// </summary>
/// <remarks>
/// <c>IfDatabase(params string[])</c> does an exact <see cref="StringComparison.OrdinalIgnoreCase"/>
/// match against the processor's <c>DatabaseType</c> <em>or</em> <c>DatabaseTypeAliases</c>.
/// It is not a prefix match. The predicate overload sees only <c>DatabaseType</c> and must not
/// be used here: FluentMigrator 7.2 reports <c>SqlServer2016</c>, <c>MySql8</c>,
/// <c>OracleManaged</c>, <c>PostgreSQL15_0</c>, etc. as <c>DatabaseType</c>, with
/// <c>SqlServer</c> / <c>MySql</c> / <c>Oracle</c> / <c>PostgreSQL</c> as aliases.
/// </remarks>
internal static class MigrationDatabases
{
/// <summary>
/// Names matched against DatabaseType or aliases for the DateTimeOffset create-table branch
/// (everything except SQLite).
/// </summary>
/// <remarks>
/// <c>Postgres</c> covers the pre-7.2 <c>PostgresProcessor</c>.
/// <c>PostgreSQL</c> is an alias on FluentMigrator 7.2 <c>AddPostgres()</c> /
/// <c>AddPostgres10_0()</c> / <c>AddPostgres11_0()</c> / <c>AddPostgres15_0()</c>.
/// <c>PostgreSQL92</c> is an alias on <c>AddPostgres92()</c> (DatabaseType <c>Postgres92</c>).
/// </remarks>
public static readonly string[] DateTimeOffsetProviders =
[
"SqlServer",
"Oracle",
"MySql",
"Postgres",
"PostgreSQL",
"PostgreSQL92"
];
}
Loading
Loading