Skip to content

Commit

Permalink
Sync with EF Core
Browse files Browse the repository at this point in the history
  • Loading branch information
roji committed Feb 28, 2017
1 parent 373d655 commit 5522d4b
Show file tree
Hide file tree
Showing 17 changed files with 157 additions and 205 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,8 @@ namespace Microsoft.EntityFrameworkCore.Metadata.Conventions
{
public class NpgsqlConventionSetBuilder : RelationalConventionSetBuilder
{
public NpgsqlConventionSetBuilder(
[NotNull] IRelationalTypeMapper typeMapper,
[CanBeNull] ICurrentDbContext currentContext,
[CanBeNull] IDbSetFinder setFinder)
: base(typeMapper, currentContext, setFinder)
public NpgsqlConventionSetBuilder([NotNull] RelationalConventionSetBuilderDependencies dependencies)
: base(dependencies)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,24 +35,8 @@ namespace Microsoft.EntityFrameworkCore.Migrations.Internal
{
public class NpgsqlHistoryRepository : HistoryRepository
{
public NpgsqlHistoryRepository(
[NotNull] IDatabaseCreator databaseCreator,
[NotNull] IRawSqlCommandBuilder rawSqlCommandBuilder,
[NotNull] INpgsqlRelationalConnection connection,
[NotNull] IDbContextOptions options,
[NotNull] IMigrationsModelDiffer modelDiffer,
[NotNull] IMigrationsSqlGenerator migrationsSqlGenerator,
[NotNull] IRelationalAnnotationProvider annotations,
[NotNull] ISqlGenerationHelper sqlGenerationHelper)
: base(
databaseCreator,
rawSqlCommandBuilder,
connection,
options,
modelDiffer,
migrationsSqlGenerator,
annotations,
sqlGenerationHelper)
public NpgsqlHistoryRepository([NotNull] HistoryRepositoryDependencies dependencies)
: base(dependencies)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
Expand All @@ -32,6 +33,11 @@ namespace Microsoft.EntityFrameworkCore.Migrations.Internal
{
public class NpgsqlMigrationsAnnotationProvider : MigrationsAnnotationProvider
{
public NpgsqlMigrationsAnnotationProvider([NotNull] MigrationsAnnotationProviderDependencies dependencies)
: base(dependencies)
{
}

public override IEnumerable<IAnnotation> For(IEntityType entityType)
{
if (entityType.Npgsql().Comment != null)
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@
#endregion

using System.Collections.Generic;
using JetBrains.Annotations;

namespace Microsoft.EntityFrameworkCore.Query.ExpressionTranslators.Internal
{
public class NpgsqlCompositeMemberTranslator : RelationalCompositeMemberTranslator
{
public NpgsqlCompositeMemberTranslator()
public NpgsqlCompositeMemberTranslator([NotNull] RelationalCompositeMemberTranslatorDependencies dependencies)
: base(dependencies)
{
AddTranslators(new List<IMemberTranslator>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,9 @@ public class NpgsqlCompositeMethodCallTranslator : RelationalCompositeMethodCall
new NpgsqlRegexIsMatchTranslator(),
};

public NpgsqlCompositeMethodCallTranslator([NotNull] ILogger<NpgsqlCompositeMethodCallTranslator> logger)
: base(logger)
public NpgsqlCompositeMethodCallTranslator(
[NotNull] RelationalCompositeMethodCallTranslatorDependencies dependencies)
: base(dependencies)
{
// ReSharper disable once DoNotCallOverridableMethodsInConstructor
AddTranslators(_methodCallTranslators);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,22 +33,14 @@ namespace Microsoft.EntityFrameworkCore.Query.Internal
public class NpgsqlQueryCompilationContext : RelationalQueryCompilationContext
{
public NpgsqlQueryCompilationContext(
[NotNull] IModel model,
[NotNull] ISensitiveDataLogger logger,
[NotNull] IEntityQueryModelVisitorFactory entityQueryModelVisitorFactory,
[NotNull] IRequiresMaterializationExpressionVisitorFactory requiresMaterializationExpressionVisitorFactory,
[NotNull] ILinqOperatorProvider linqOpeartorProvider,
[NotNull] QueryCompilationContextDependencies dependencies,
[NotNull] ILinqOperatorProvider linqOperatorProvider,
[NotNull] IQueryMethodProvider queryMethodProvider,
[NotNull] Type contextType,
bool trackQueryResults)
: base(
Check.NotNull(model, nameof(model)),
Check.NotNull(logger, nameof(logger)),
Check.NotNull(entityQueryModelVisitorFactory, nameof(entityQueryModelVisitorFactory)),
Check.NotNull(requiresMaterializationExpressionVisitorFactory, nameof(requiresMaterializationExpressionVisitorFactory)),
Check.NotNull(linqOpeartorProvider, nameof(linqOpeartorProvider)),
Check.NotNull(queryMethodProvider, nameof(queryMethodProvider)),
Check.NotNull(contextType, nameof(contextType)),
dependencies,
linqOperatorProvider,
queryMethodProvider,
trackQueryResults)
{
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,41 +34,27 @@ namespace Microsoft.EntityFrameworkCore.Query.Internal
public class NpgsqlQueryCompilationContextFactory : RelationalQueryCompilationContextFactory
{
public NpgsqlQueryCompilationContextFactory(
[NotNull] IModel model,
[NotNull] ISensitiveDataLogger<NpgsqlQueryCompilationContextFactory> logger,
[NotNull] IEntityQueryModelVisitorFactory entityQueryModelVisitorFactory,
[NotNull] IRequiresMaterializationExpressionVisitorFactory requiresMaterializationExpressionVisitorFactory,
[NotNull] INodeTypeProviderFactory nodeTypeProviderFactory,
[NotNull] ICurrentDbContext currentContext)
: base(
model,
logger,
entityQueryModelVisitorFactory,
requiresMaterializationExpressionVisitorFactory,
nodeTypeProviderFactory,
currentContext)
[NotNull] QueryCompilationContextDependencies dependencies,
[NotNull] RelationalQueryCompilationContextDependencies relationalDependencies)
: base(dependencies, relationalDependencies)
{
}

/// <summary>
/// This API supports the Entity Framework Core infrastructure and is not intended to be used
/// directly from your code. This API may change or be removed in future releases.
/// </summary>
public override QueryCompilationContext Create(bool async)
=> async
? new NpgsqlQueryCompilationContext(
Model,
(ISensitiveDataLogger)Logger,
EntityQueryModelVisitorFactory,
RequiresMaterializationExpressionVisitorFactory,
Dependencies,
new AsyncLinqOperatorProvider(),
new AsyncQueryMethodProvider(),
ContextType,
TrackQueryResults)
: new NpgsqlQueryCompilationContext(
Model,
(ISensitiveDataLogger)Logger,
EntityQueryModelVisitorFactory,
RequiresMaterializationExpressionVisitorFactory,
Dependencies,
new LinqOperatorProvider(),
new QueryMethodProvider(),
ContextType,
TrackQueryResults);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,9 @@ public class NpgsqlQuerySqlGenerator : DefaultQuerySqlGenerator
protected override string TypedFalseLiteral => "FALSE::bool";

public NpgsqlQuerySqlGenerator(
[NotNull] IRelationalCommandBuilderFactory relationalCommandBuilderFactory,
[NotNull] ISqlGenerationHelper sqlGenerationHelper,
[NotNull] IParameterNameGeneratorFactory parameterNameGeneratorFactory,
[NotNull] IRelationalTypeMapper relationalTypeMapper,
[NotNull] QuerySqlGeneratorDependencies dependencies,
[NotNull] SelectExpression selectExpression)
: base(
relationalCommandBuilderFactory,
sqlGenerationHelper,
parameterNameGeneratorFactory,
relationalTypeMapper,
selectExpression)
: base(dependencies, selectExpression)
{
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,25 +30,14 @@ namespace Microsoft.EntityFrameworkCore.Query.Sql.Internal
{
public class NpgsqlQuerySqlGeneratorFactory : QuerySqlGeneratorFactoryBase
{
public NpgsqlQuerySqlGeneratorFactory(
[NotNull] IRelationalCommandBuilderFactory commandBuilderFactory,
[NotNull] ISqlGenerationHelper sqlGenerationHelper,
[NotNull] IParameterNameGeneratorFactory parameterNameGeneratorFactory,
[NotNull] IRelationalTypeMapper relationalTypeMapper)
: base(
Check.NotNull(commandBuilderFactory, nameof(commandBuilderFactory)),
Check.NotNull(sqlGenerationHelper, nameof(sqlGenerationHelper)),
Check.NotNull(parameterNameGeneratorFactory, nameof(parameterNameGeneratorFactory)),
Check.NotNull(relationalTypeMapper, nameof(relationalTypeMapper)))
public NpgsqlQuerySqlGeneratorFactory([NotNull] QuerySqlGeneratorDependencies dependencies)
: base(dependencies)
{
}

public override IQuerySqlGenerator CreateDefault(SelectExpression selectExpression)
=> new NpgsqlQuerySqlGenerator(
CommandBuilderFactory,
SqlGenerationHelper,
ParameterNameGeneratorFactory,
RelationalTypeMapper,
Dependencies,
Check.NotNull(selectExpression, nameof(selectExpression)));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -43,33 +43,23 @@ namespace Microsoft.EntityFrameworkCore.Storage.Internal
public class NpgsqlDatabaseCreator : RelationalDatabaseCreator
{
readonly INpgsqlRelationalConnection _connection;
readonly IMigrationsSqlGenerator _migrationsSqlGenerator;
readonly IRawSqlCommandBuilder _rawSqlCommandBuilder;
readonly IMigrationsModelDiffer _modelDiffer;

public NpgsqlDatabaseCreator(
[NotNull] RelationalDatabaseCreatorDependencies dependencies,
[NotNull] INpgsqlRelationalConnection connection,
[NotNull] IMigrationsModelDiffer modelDiffer,
[NotNull] IMigrationsSqlGenerator migrationsSqlGenerator,
[NotNull] IMigrationCommandExecutor migrationCommandExecutor,
[NotNull] IModel model,
[NotNull] IRawSqlCommandBuilder rawSqlCommandBuilder,
[NotNull] IExecutionStrategyFactory executionStrategyFactory)
: base(model, connection, modelDiffer, migrationsSqlGenerator, migrationCommandExecutor, executionStrategyFactory)
[NotNull] IRawSqlCommandBuilder rawSqlCommandBuilder)
: base(dependencies)
{
Check.NotNull(rawSqlCommandBuilder, nameof(rawSqlCommandBuilder));

_connection = connection;
_modelDiffer = modelDiffer;
_migrationsSqlGenerator = migrationsSqlGenerator;
_rawSqlCommandBuilder = rawSqlCommandBuilder;
}

public override void Create()
{
using (var masterConnection = _connection.CreateMasterConnection())
{
MigrationCommandExecutor
Dependencies.MigrationCommandExecutor
.ExecuteNonQuery(CreateCreateOperations(), masterConnection);

ClearPool();
Expand All @@ -80,7 +70,7 @@ public override void Create()
{
using (var masterConnection = _connection.CreateMasterConnection())
{
await MigrationCommandExecutor
await Dependencies.MigrationCommandExecutor
.ExecuteNonQueryAsync(CreateCreateOperations(), masterConnection, cancellationToken);

ClearPool();
Expand All @@ -102,7 +92,13 @@ FROM information_schema.tables
");

IReadOnlyList<MigrationCommand> CreateCreateOperations()
=> _migrationsSqlGenerator.Generate(new[] { new NpgsqlCreateDatabaseOperation { Name = _connection.DbConnection.Database, Template = Model.Npgsql().DatabaseTemplate } });
=> Dependencies.MigrationsSqlGenerator.Generate(new[]
{
new NpgsqlCreateDatabaseOperation
{
Name = _connection.DbConnection.Database, Template = Dependencies.Model.Npgsql().DatabaseTemplate
}
});

public override bool Exists()
{
Expand Down Expand Up @@ -185,7 +181,7 @@ public override void Delete()

using (var masterConnection = _connection.CreateMasterConnection())
{
MigrationCommandExecutor
Dependencies.MigrationCommandExecutor
.ExecuteNonQuery(CreateDropCommands(), masterConnection);
}
}
Expand All @@ -196,45 +192,45 @@ public override void Delete()

using (var masterConnection = _connection.CreateMasterConnection())
{
await MigrationCommandExecutor
await Dependencies.MigrationCommandExecutor
.ExecuteNonQueryAsync(CreateDropCommands(), masterConnection, cancellationToken);
}
}

public override void CreateTables()
{
var operations = _modelDiffer.GetDifferences(null, Model);
var commands = _migrationsSqlGenerator.Generate(operations, Model);
var operations = Dependencies.ModelDiffer.GetDifferences(null, Dependencies.Model);
var commands = Dependencies.MigrationsSqlGenerator.Generate(operations, Dependencies.Model);

// Adding a PostgreSQL extension might define new types (e.g. hstore), which we
// Npgsql to reload
var reloadTypes = operations.Any(o => o is AlterDatabaseOperation && PostgresExtension.GetPostgresExtensions(o).Any());

MigrationCommandExecutor.ExecuteNonQuery(commands, Connection);
Dependencies.MigrationCommandExecutor.ExecuteNonQuery(commands, _connection);

if (reloadTypes)
{
var npgsqlConn = (NpgsqlConnection)Connection.DbConnection;
var npgsqlConn = (NpgsqlConnection)_connection.DbConnection;
if (npgsqlConn.FullState == ConnectionState.Open)
npgsqlConn.ReloadTypes();
}
}

public override async Task CreateTablesAsync(CancellationToken cancellationToken = default(CancellationToken))
{
var operations = _modelDiffer.GetDifferences(null, Model);
var commands = _migrationsSqlGenerator.Generate(operations, Model);
var operations = Dependencies.ModelDiffer.GetDifferences(null, Dependencies.Model);
var commands = Dependencies.MigrationsSqlGenerator.Generate(operations, Dependencies.Model);

// Adding a PostgreSQL extension might define new types (e.g. hstore), which we
// Npgsql to reload
var reloadTypes = operations.Any(o => o is AlterDatabaseOperation && PostgresExtension.GetPostgresExtensions(o).Any());

await MigrationCommandExecutor.ExecuteNonQueryAsync(commands, Connection, cancellationToken);
await Dependencies.MigrationCommandExecutor.ExecuteNonQueryAsync(commands, _connection, cancellationToken);

// TODO: Not async
if (reloadTypes)
{
var npgsqlConn = (NpgsqlConnection)Connection.DbConnection;
var npgsqlConn = (NpgsqlConnection)_connection.DbConnection;
if (npgsqlConn.FullState == ConnectionState.Open)
npgsqlConn.ReloadTypes();
}
Expand All @@ -249,8 +245,7 @@ IReadOnlyList<MigrationCommand> CreateDropCommands()
new NpgsqlDropDatabaseOperation { Name = _connection.DbConnection.Database }
};

var masterCommands = _migrationsSqlGenerator.Generate(operations);
return masterCommands;
return Dependencies.MigrationsSqlGenerator.Generate(operations);
}

// Clear connection pools in case there are active connections that are pooled
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,18 @@
using System;
using System.Globalization;
using System.Text;
using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Utilities;

namespace Microsoft.EntityFrameworkCore.Storage.Internal
{
public class NpgsqlSqlGenerationHelper : RelationalSqlGenerationHelper
{
public NpgsqlSqlGenerationHelper([NotNull] RelationalSqlGenerationHelperDependencies dependencies)
: base(dependencies)
{
}

public override string EscapeIdentifier(string identifier)
=> Check.NotEmpty(identifier, nameof(identifier)).Replace("\"", "\"\"");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@ public class NpgsqlTypeMapper : RelationalTypeMapper

public override IStringRelationalTypeMapper StringMapper { get; }

public NpgsqlTypeMapper()
public NpgsqlTypeMapper([NotNull] RelationalTypeMapperDependencies dependencies)
: base(dependencies)
{
// First, PostgreSQL type name (string) -> RelationalTypeMapping
_storeTypeMappings = TypeHandlerRegistry.HandlerTypes.Values
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ namespace Microsoft.EntityFrameworkCore.Update.Internal
{
public class NpgsqlUpdateSqlGenerator : UpdateSqlGenerator
{
public NpgsqlUpdateSqlGenerator([NotNull] ISqlGenerationHelper sqlGenerationHelper)
: base(sqlGenerationHelper)
public NpgsqlUpdateSqlGenerator([NotNull] UpdateSqlGeneratorDependencies dependencies)
: base(dependencies)
{
}

Expand Down
Loading

0 comments on commit 5522d4b

Please sign in to comment.