Skip to content

Commit

Permalink
Completely remove the server version auto detection feature, because …
Browse files Browse the repository at this point in the history
…it is broken and cannot be fixed. (#944)
  • Loading branch information
lauxjpn authored Nov 18, 2019
1 parent 1ddf22e commit 3bab75c
Show file tree
Hide file tree
Showing 17 changed files with 56 additions and 157 deletions.
3 changes: 0 additions & 3 deletions src/EFCore.MySql/Design/Internal/MySqlDesignTimeServices.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Migrations;
using Pomelo.EntityFrameworkCore.MySql.Migrations.Internal;

namespace Pomelo.EntityFrameworkCore.MySql.Design.Internal
{
Expand All @@ -29,7 +27,6 @@ public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
.AddSingleton<IAnnotationCodeGenerator, MySqlAnnotationCodeGenerator>();

serviceCollection.TryAddSingleton<IMySqlOptions, MySqlOptions>();
serviceCollection.TryAddSingleton<IMySqlConnectionInfo, MySqlConnectionInfo>();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,6 @@ public static IServiceCollection AddEntityFrameworkMySql([NotNull] this IService
.TryAdd<IMigrationsModelDiffer, MySqlMigrationsModelDiffer>()
.TryAddProviderSpecificServices(m => m
.TryAddSingleton<IMySqlOptions, MySqlOptions>()
.TryAddSingleton<IMySqlConnectionInfo, MySqlConnectionInfo>()
.TryAddScoped<IMySqlRelationalConnection, MySqlRelationalConnection>()
.TryAddScoped<IMySqlUpdateSqlGenerator, MySqlUpdateSqlGenerator>());

Expand Down
20 changes: 10 additions & 10 deletions src/EFCore.MySql/Migrations/MySqlMigrationsSqlGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
using Microsoft.EntityFrameworkCore.Migrations.Operations;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.EntityFrameworkCore.Utilities;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;
using Pomelo.EntityFrameworkCore.MySql.Internal;
using Pomelo.EntityFrameworkCore.MySql.Metadata.Internal;
using Pomelo.EntityFrameworkCore.MySql.Storage;
using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;

namespace Pomelo.EntityFrameworkCore.MySql.Migrations
{
Expand All @@ -30,19 +30,19 @@ public class MySqlMigrationsSqlGenerator : MigrationsSqlGenerator
RegexOptions.IgnoreCase);

private readonly IMigrationsAnnotationProvider _migrationsAnnotations;
private readonly IMySqlConnectionInfo _connectionInfo;
private readonly IMySqlOptions _options;
private readonly RelationalTypeMapping _stringTypeMapping;

protected virtual ServerVersion ServerVersion => _connectionInfo.ServerVersion;
protected virtual ServerVersion ServerVersion => _options.ServerVersion;

public MySqlMigrationsSqlGenerator(
[NotNull] MigrationsSqlGeneratorDependencies dependencies,
[NotNull] IMigrationsAnnotationProvider migrationsAnnotations,
[NotNull] IMySqlConnectionInfo connectionInfo)
[NotNull] IMySqlOptions options)
: base(dependencies)
{
_migrationsAnnotations = migrationsAnnotations;
_connectionInfo = connectionInfo;
_options = options;
_stringTypeMapping = dependencies.TypeMappingSource.GetMapping(typeof(string));
}

Expand Down Expand Up @@ -148,7 +148,7 @@ protected override void Generate(

if (operation.NewName != null)
{
if (_connectionInfo.ServerVersion.SupportsRenameIndex)
if (_options.ServerVersion.SupportsRenameIndex)
{
builder.Append("ALTER TABLE ")
.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema))
Expand Down Expand Up @@ -490,7 +490,7 @@ protected override void Generate(
builder.Append("ALTER TABLE ")
.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Table, operation.Schema));

if (_connectionInfo.ServerVersion.SupportsRenameColumn)
if (_options.ServerVersion.SupportsRenameColumn)
{
builder.Append(" RENAME COLUMN ")
.Append(Dependencies.SqlGenerationHelper.DelimitIdentifier(operation.Name))
Expand Down Expand Up @@ -689,7 +689,7 @@ protected override void ColumnDefinition(
autoIncrement = true;
break;
case "datetime":
if (!_connectionInfo.ServerVersion.SupportsDateTime6)
if (!_options.ServerVersion.SupportsDateTime6)
{
throw new InvalidOperationException(
$"Error in {table}.{name}: DATETIME does not support values generated " +
Expand All @@ -709,7 +709,7 @@ protected override void ColumnDefinition(
switch (matchType)
{
case "datetime":
if (!_connectionInfo.ServerVersion.SupportsDateTime6)
if (!_options.ServerVersion.SupportsDateTime6)
{
throw new InvalidOperationException(
$"Error in {table}.{name}: DATETIME does not support values generated " +
Expand Down Expand Up @@ -756,7 +756,7 @@ protected override void ColumnDefinition(
.Append(" AS ")
.Append($"({operation.ComputedColumnSql})");

if (operation.IsNullable && _connectionInfo.ServerVersion.SupportsNullableGeneratedColumns)
if (operation.IsNullable && _options.ServerVersion.SupportsNullableGeneratedColumns)
{
builder.Append(" NULL");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,17 @@
using Microsoft.EntityFrameworkCore.Diagnostics;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;

namespace Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal
{
public class MySqlCompatibilityExpressionVisitor : ExpressionVisitor
{
private readonly IMySqlConnectionInfo _connectionInfo;
private readonly IMySqlOptions _options;

public MySqlCompatibilityExpressionVisitor(IMySqlConnectionInfo connectionInfo)
public MySqlCompatibilityExpressionVisitor(IMySqlOptions options)
{
_connectionInfo = connectionInfo;
_options = options;
}

protected override Expression VisitExtension(Expression extensionExpression)
Expand All @@ -40,13 +40,13 @@ protected override Expression VisitExtension(Expression extensionExpression)
}

protected virtual Expression VisitRowNumber(RowNumberExpression rowNumberExpression)
=> CheckSupport(rowNumberExpression, _connectionInfo.ServerVersion.SupportsWindowFunctions);
=> CheckSupport(rowNumberExpression, _options.ServerVersion.SupportsWindowFunctions);

protected virtual Expression VisitCrossApply(CrossApplyExpression crossApplyExpression)
=> CheckSupport(crossApplyExpression, _connectionInfo.ServerVersion.SupportsCrossApply);
=> CheckSupport(crossApplyExpression, _options.ServerVersion.SupportsCrossApply);

protected virtual Expression VisitOuterApply(OuterApplyExpression outerApplyExpression)
=> CheckSupport(outerApplyExpression, _connectionInfo.ServerVersion.SupportsOuterApply);
=> CheckSupport(outerApplyExpression, _options.ServerVersion.SupportsOuterApply);

protected virtual Expression VisitExcept(ExceptExpression exceptExpression)
=> CheckSupport(exceptExpression, false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
using Microsoft.EntityFrameworkCore.Query;
using Microsoft.EntityFrameworkCore.Query.SqlExpressions;
using Microsoft.EntityFrameworkCore.Utilities;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;
using Pomelo.EntityFrameworkCore.MySql.Query.Expressions.Internal;
using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;

namespace Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal
{
Expand Down Expand Up @@ -41,18 +41,18 @@ public class MySqlQuerySqlGenerator : QuerySqlGenerator

private const ulong LimitUpperBound = 18446744073709551610;

private readonly IMySqlConnectionInfo _connectionInfo;
private readonly IMySqlOptions _options;

/// <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 MySqlQuerySqlGenerator(
[NotNull] QuerySqlGeneratorDependencies dependencies,
[CanBeNull] IMySqlConnectionInfo connectionInfo)
[CanBeNull] IMySqlOptions options)
: base(dependencies)
{
_connectionInfo = connectionInfo;
_options = options;
}

/// <summary>
Expand Down Expand Up @@ -190,13 +190,13 @@ protected override Expression VisitSqlUnary(SqlUnaryExpression sqlUnaryExpressio

var useDecimalToDoubleFloatWorkaround = false;

if (castMapping.StartsWith("double") && !_connectionInfo.ServerVersion.SupportsDoubleCast)
if (castMapping.StartsWith("double") && !_options.ServerVersion.SupportsDoubleCast)
{
useDecimalToDoubleFloatWorkaround = true;
castMapping = "decimal(65,30)";
}

if (castMapping.StartsWith("float") && !_connectionInfo.ServerVersion.SupportsFloatCast)
if (castMapping.StartsWith("float") && !_options.ServerVersion.SupportsFloatCast)
{
useDecimalToDoubleFloatWorkaround = true;
castMapping = "decimal(65,30)";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@

using JetBrains.Annotations;
using Microsoft.EntityFrameworkCore.Query;
using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;

namespace Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal
{
public class MySqlQuerySqlGeneratorFactory : IQuerySqlGeneratorFactory
{
private readonly QuerySqlGeneratorDependencies _dependencies;
private readonly IMySqlConnectionInfo _connectionInfo;
private readonly IMySqlOptions _options;

public MySqlQuerySqlGeneratorFactory(
[NotNull] QuerySqlGeneratorDependencies dependencies,
IMySqlConnectionInfo connectionInfo)
IMySqlOptions options)
{
_dependencies = dependencies;
_connectionInfo = connectionInfo;
_options = options;
}

public virtual QuerySqlGenerator Create()
=> new MySqlQuerySqlGenerator(_dependencies, _connectionInfo);
=> new MySqlQuerySqlGenerator(_dependencies, _options);
}
}
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
using System.Linq.Expressions;
using Microsoft.EntityFrameworkCore.Query;
using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;

namespace Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal
{
public class MySqlQueryTranslationPostprocessor : RelationalQueryTranslationPostprocessor
{
private readonly IMySqlConnectionInfo _connectionInfo;
private readonly IMySqlOptions _options;

public MySqlQueryTranslationPostprocessor(
QueryTranslationPostprocessorDependencies dependencies,
RelationalQueryTranslationPostprocessorDependencies relationalDependencies,
QueryCompilationContext queryCompilationContext,
IMySqlConnectionInfo connectionInfo)
IMySqlOptions options)
: base(dependencies, relationalDependencies, queryCompilationContext)
{
_connectionInfo = connectionInfo;
_options = options;
}

public override Expression Process(Expression query)
{
query = new MySqlCompatibilityExpressionVisitor(_connectionInfo).Visit(query);
query = new MySqlCompatibilityExpressionVisitor(_options).Visit(query);

return base.Process(query);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
using Microsoft.EntityFrameworkCore.Query;
using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;

namespace Pomelo.EntityFrameworkCore.MySql.Query.ExpressionVisitors.Internal
{
public class MySqlQueryTranslationPostprocessorFactory : IQueryTranslationPostprocessorFactory
{
private readonly QueryTranslationPostprocessorDependencies _dependencies;
private readonly RelationalQueryTranslationPostprocessorDependencies _relationalDependencies;
private readonly IMySqlConnectionInfo _connectionInfo;
private readonly IMySqlOptions _options;

public MySqlQueryTranslationPostprocessorFactory(
QueryTranslationPostprocessorDependencies dependencies,
RelationalQueryTranslationPostprocessorDependencies relationalDependencies,
IMySqlConnectionInfo connectionInfo)
IMySqlOptions options)
{
_dependencies = dependencies;
_relationalDependencies = relationalDependencies;
_connectionInfo = connectionInfo;
_options = options;
}

public virtual QueryTranslationPostprocessor Create(QueryCompilationContext queryCompilationContext)
=> new MySqlQueryTranslationPostprocessor(
_dependencies,
_relationalDependencies,
queryCompilationContext,
_connectionInfo);
_options);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@
using Microsoft.EntityFrameworkCore.Utilities;
using Microsoft.Extensions.Logging;
using MySql.Data.MySqlClient;
using Pomelo.EntityFrameworkCore.MySql.Infrastructure.Internal;
using Pomelo.EntityFrameworkCore.MySql.Internal;
using Pomelo.EntityFrameworkCore.MySql.Metadata.Internal;
using Pomelo.EntityFrameworkCore.MySql.Storage.Internal;

Expand All @@ -27,20 +25,14 @@ namespace Pomelo.EntityFrameworkCore.MySql.Scaffolding.Internal
public class MySqlDatabaseModelFactory : DatabaseModelFactory
{
private readonly IDiagnosticsLogger<DbLoggerCategory.Scaffolding> _logger;
private readonly IServiceProvider _serviceProvider;
private readonly IMySqlOptions _options;
private MySqlScaffoldingConnectionSettings _settings;

public MySqlDatabaseModelFactory(
[NotNull] IDiagnosticsLogger<DbLoggerCategory.Scaffolding> logger,
IServiceProvider serviceProvider,
IMySqlOptions options)
[NotNull] IDiagnosticsLogger<DbLoggerCategory.Scaffolding> logger)
{
Check.NotNull(logger, nameof(logger));

_logger = logger;
_serviceProvider = serviceProvider;
_options = options;
_settings = new MySqlScaffoldingConnectionSettings(string.Empty);
}

Expand Down Expand Up @@ -70,8 +62,6 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto

try
{
SetupMySqlOptions(connection);

databaseModel.DatabaseName = connection.Database;
databaseModel.DefaultSchema = GetDefaultSchema(connection);

Expand All @@ -97,19 +87,6 @@ public override DatabaseModel Create(DbConnection connection, DatabaseModelFacto
}
}

private void SetupMySqlOptions(DbConnection connection)
{
var optionsBuilder = new DbContextOptionsBuilder();
optionsBuilder.UseMySql(connection);

if (Equals(_options, new MySqlOptions()))
{
_options.Initialize(optionsBuilder.Options);
}

MySqlConnectionInfo.SetServerVersion((MySqlConnection)connection, _serviceProvider);
}

private string GetDefaultSchema(DbConnection connection)
{
return null;
Expand Down
14 changes: 0 additions & 14 deletions src/EFCore.MySql/Storage/Internal/IMySqlConnectionInfo.cs

This file was deleted.

Loading

0 comments on commit 3bab75c

Please sign in to comment.