Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
67 changes: 37 additions & 30 deletions src/EFCore.PG/Extensions/NpgsqlServiceCollectionExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#region License

// The PostgreSQL License
//
// Copyright (C) 2016 The Npgsql Development Team
Expand All @@ -19,6 +20,7 @@
// AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
// ON AN "AS IS" BASIS, AND THE NPGSQL DEVELOPMENT TEAM HAS NO OBLIGATIONS
// TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

#endregion

using JetBrains.Annotations;
Expand All @@ -28,7 +30,6 @@
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.EntityFrameworkCore.Query.ExpressionTranslators;
using Microsoft.EntityFrameworkCore.Query.ExpressionVisitors;
using Microsoft.EntityFrameworkCore.Query.Internal;
using Microsoft.EntityFrameworkCore.Query.Sql;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Update;
Expand All @@ -51,6 +52,10 @@
// ReSharper disable once CheckNamespace
namespace Microsoft.Extensions.DependencyInjection
{
/// <summary>
/// Provides extension methods to configure Entity Framework Core for Npgsql.
/// </summary>
// ReSharper disable once UnusedMember.Global
public static class NpgsqlEntityFrameworkServicesBuilderExtensions
{
/// <summary>
Expand Down Expand Up @@ -86,35 +91,37 @@ public static IServiceCollection AddEntityFrameworkNpgsql([NotNull] this IServic
{
Check.NotNull(serviceCollection, nameof(serviceCollection));

var builder = new EntityFrameworkRelationalServicesBuilder(serviceCollection)
.TryAdd<IDatabaseProvider, DatabaseProvider<NpgsqlOptionsExtension>>()
.TryAdd<IValueGeneratorCache>(p => p.GetService<INpgsqlValueGeneratorCache>())
.TryAdd<IRelationalTypeMappingSource, NpgsqlTypeMappingSource>()
.TryAdd<ISqlGenerationHelper, NpgsqlSqlGenerationHelper>()
.TryAdd<IMigrationsAnnotationProvider, NpgsqlMigrationsAnnotationProvider>()
.TryAdd<IRelationalValueBufferFactoryFactory, TypedRelationalValueBufferFactoryFactory>()
.TryAdd<IConventionSetBuilder, NpgsqlConventionSetBuilder>()
.TryAdd<IUpdateSqlGenerator, NpgsqlUpdateSqlGenerator>()
.TryAdd<IModificationCommandBatchFactory, NpgsqlModificationCommandBatchFactory>()
.TryAdd<IValueGeneratorSelector, NpgsqlValueGeneratorSelector>()
.TryAdd<IRelationalConnection>(p => p.GetService<INpgsqlRelationalConnection>())
.TryAdd<IMigrationsSqlGenerator, NpgsqlMigrationsSqlGenerator>()
.TryAdd<IRelationalDatabaseCreator, NpgsqlDatabaseCreator>()
.TryAdd<IHistoryRepository, NpgsqlHistoryRepository>()
.TryAdd<ICompiledQueryCacheKeyGenerator, NpgsqlCompiledQueryCacheKeyGenerator>()
.TryAdd<IExecutionStrategyFactory, NpgsqlExecutionStrategyFactory>()
.TryAdd<IQueryCompilationContextFactory, NpgsqlQueryCompilationContextFactory>()
.TryAdd<IMemberTranslator, NpgsqlCompositeMemberTranslator>()
.TryAdd<ICompositeMethodCallTranslator, NpgsqlCompositeMethodCallTranslator>()
.TryAdd<IQuerySqlGeneratorFactory, NpgsqlQuerySqlGeneratorFactory>()
.TryAdd<ISqlTranslatingExpressionVisitorFactory, NpgsqlSqlTranslatingExpressionVisitorFactory>()
.TryAdd<ISingletonOptions, INpgsqlOptions>(p => p.GetService<INpgsqlOptions>())
.TryAdd<IEvaluatableExpressionFilter, NpgsqlEvaluatableExpressionFilter>()
.TryAddProviderSpecificServices(b => b
.TryAddSingleton<INpgsqlValueGeneratorCache, NpgsqlValueGeneratorCache>()
.TryAddSingleton<INpgsqlOptions, NpgsqlOptions>()
.TryAddScoped<INpgsqlSequenceValueGeneratorFactory, NpgsqlSequenceValueGeneratorFactory>()
.TryAddScoped<INpgsqlRelationalConnection, NpgsqlRelationalConnection>());
var builder =
new EntityFrameworkRelationalServicesBuilder(serviceCollection)
.TryAdd<IDatabaseProvider, DatabaseProvider<NpgsqlOptionsExtension>>()
.TryAdd<IValueGeneratorCache>(p => p.GetService<INpgsqlValueGeneratorCache>())
.TryAdd<IRelationalTypeMappingSource, NpgsqlTypeMappingSource>()
.TryAdd<ISqlGenerationHelper, NpgsqlSqlGenerationHelper>()
.TryAdd<IMigrationsAnnotationProvider, NpgsqlMigrationsAnnotationProvider>()
.TryAdd<IRelationalValueBufferFactoryFactory, TypedRelationalValueBufferFactoryFactory>()
.TryAdd<IConventionSetBuilder, NpgsqlConventionSetBuilder>()
.TryAdd<IUpdateSqlGenerator, NpgsqlUpdateSqlGenerator>()
.TryAdd<IModificationCommandBatchFactory, NpgsqlModificationCommandBatchFactory>()
.TryAdd<IValueGeneratorSelector, NpgsqlValueGeneratorSelector>()
.TryAdd<IRelationalConnection>(p => p.GetService<INpgsqlRelationalConnection>())
.TryAdd<IMigrationsSqlGenerator, NpgsqlMigrationsSqlGenerator>()
.TryAdd<IRelationalDatabaseCreator, NpgsqlDatabaseCreator>()
.TryAdd<IHistoryRepository, NpgsqlHistoryRepository>()
.TryAdd<ICompiledQueryCacheKeyGenerator, NpgsqlCompiledQueryCacheKeyGenerator>()
.TryAdd<IExecutionStrategyFactory, NpgsqlExecutionStrategyFactory>()
.TryAdd<IQueryCompilationContextFactory, NpgsqlQueryCompilationContextFactory>()
.TryAdd<IMemberTranslator, NpgsqlCompositeMemberTranslator>()
.TryAdd<ICompositeMethodCallTranslator, NpgsqlCompositeMethodCallTranslator>()
.TryAdd<IQuerySqlGeneratorFactory, NpgsqlQuerySqlGeneratorFactory>()
.TryAdd<ISqlTranslatingExpressionVisitorFactory, NpgsqlSqlTranslatingExpressionVisitorFactory>()
.TryAdd<ISingletonOptions, INpgsqlOptions>(p => p.GetService<INpgsqlOptions>())
.TryAdd<IEvaluatableExpressionFilter, NpgsqlEvaluatableExpressionFilter>()
.TryAddProviderSpecificServices(
b => b
.TryAddSingleton<INpgsqlValueGeneratorCache, NpgsqlValueGeneratorCache>()
.TryAddSingleton<INpgsqlOptions, NpgsqlOptions>()
.TryAddScoped<INpgsqlSequenceValueGeneratorFactory, NpgsqlSequenceValueGeneratorFactory>()
.TryAddScoped<INpgsqlRelationalConnection, NpgsqlRelationalConnection>());

builder.TryAddCoreServices();

Expand Down
12 changes: 10 additions & 2 deletions src/EFCore.PG/Query/Expressions/Internal/ArrayAnyAllExpression.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,31 +43,39 @@ namespace Npgsql.EntityFrameworkCore.PostgreSQL.Query.Expressions.Internal
public class ArrayAnyAllExpression : Expression, IEquatable<ArrayAnyAllExpression>
{
/// <inheritdoc />
public override ExpressionType NodeType { get; } = ExpressionType.Extension;
public override ExpressionType NodeType => ExpressionType.Extension;

/// <inheritdoc />
public override Type Type { get; } = typeof(bool);
public override Type Type => typeof(bool);

/// <summary>
/// The value to test against the <see cref="Array"/>.
/// </summary>
[NotNull]
public virtual Expression Operand { get; }

/// <summary>
/// The array of values or patterns to test for the <see cref="Operand"/>.
/// </summary>
[NotNull]
public virtual Expression Array { get; }

/// <summary>
/// The operator.
/// </summary>
[NotNull]
public virtual string Operator { get; }

/// <summary>
/// The comparison type.
/// </summary>
public virtual ArrayComparisonType ArrayComparisonType { get; }

/// <summary>
/// True if this instance represents: {operand} = ANY ({array})".
/// </summary>
public bool IsContainsExpression => ArrayComparisonType is ArrayComparisonType.ANY && Operator is "=";

/// <summary>
/// Constructs a <see cref="ArrayAnyAllExpression"/>.
/// </summary>
Expand Down