Skip to content

Commit

Permalink
feat: add EF extension to have an ColumnStoreIndex
Browse files Browse the repository at this point in the history
  • Loading branch information
Arne Dumarey authored and CumpsD committed Aug 22, 2019
1 parent 1b7795f commit fbd79fe
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
namespace Be.Vlaanderen.Basisregisters.ProjectionHandling.Runner.MigrationExtensions
{
using System.Collections.Generic;
using System.Linq;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.SqlServer.Migrations.Internal;

public class ExtendedSqlServerMigrationsAnnotationProvider : SqlServerMigrationsAnnotationProvider
{
public ExtendedSqlServerMigrationsAnnotationProvider(MigrationsAnnotationProviderDependencies dependencies) : base(dependencies)
{ }

public override IEnumerable<IAnnotation> For(IIndex index)
{
var baseAnnotations = base.For(index);
var customAnnotations = index.GetAnnotations().Where(a => a.Name == IndexExtensions.ColumnStoreIndexAnnotationName);

return baseAnnotations.Concat(customAnnotations);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
namespace Be.Vlaanderen.Basisregisters.ProjectionHandling.Runner.MigrationExtensions
{
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Migrations.Operations;

public class ExtendedSqlServerMigrationsSqlGenerator : SqlServerMigrationsSqlGenerator
{
public ExtendedSqlServerMigrationsSqlGenerator(MigrationsSqlGeneratorDependencies dependencies, IMigrationsAnnotationProvider migrationsAnnotations) :
base(dependencies, migrationsAnnotations)
{ }

protected override void IndexTraits(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
{
base.IndexTraits(operation, model, builder);

var includeIndexAnnotation = operation.FindAnnotation(IndexExtensions.ColumnStoreIndexAnnotationName);
if (includeIndexAnnotation != null)
{
builder.Append("COLUMNSTORE ");
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
namespace Be.Vlaanderen.Basisregisters.ProjectionHandling.Runner.MigrationExtensions
{
using System.Text;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

public static class IndexExtensions
{
public static string ColumnStoreIndexAnnotationName = "SqlServer:ColumnStoreIndex";

public static IndexBuilder IsColumnStore(this IndexBuilder indexBuilder, string name)
{
var includeStatement = new StringBuilder();

indexBuilder.HasAnnotation(ColumnStoreIndexAnnotationName, includeStatement.ToString());
indexBuilder.HasName(name);

return indexBuilder;
}
}
}

0 comments on commit fbd79fe

Please sign in to comment.