Skip to content

Commit

Permalink
Comply with the latest .NET analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
virzak committed Apr 15, 2024
1 parent 0d61846 commit 47ee3d0
Show file tree
Hide file tree
Showing 105 changed files with 430 additions and 786 deletions.
2 changes: 1 addition & 1 deletion .config/dotnet-tools.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
]
},
"dotnet-reportgenerator-globaltool": {
"version": "5.2.0",
"version": "5.2.4",
"commands": [
"reportgenerator"
]
Expand Down
9 changes: 9 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,15 @@ indent_size = 2
# C# files
[*.cs]
csharp_style_namespace_declarations = file_scoped
csharp_style_expression_bodied_methods = true:silent
csharp_style_namespace_declarations = file_scoped
csharp_style_expression_bodied_operators = true
csharp_style_expression_bodied_local_functions = true

csharp_style_var_for_built_in_types = true:error
csharp_style_var_when_type_is_apparent = true:error
csharp_style_var_elsewhere = true:error

dotnet_diagnostic.IDE0005.severity = warning

#### Core EditorConfig Options ####
Expand Down
12 changes: 6 additions & 6 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@
<NpgsqlVersion>7.0.0</NpgsqlVersion>
</PropertyGroup>
<PropertyGroup Condition="!$(DefineConstants.Contains(EF_CORE_6)) and !$(DefineConstants.Contains(EF_CORE_7))">
<NetRuntime>8.0.2</NetRuntime>
<NpgsqlVersion>8.0.0</NpgsqlVersion>
<NetRuntime>8.0.4</NetRuntime>
<NpgsqlVersion>8.0.2</NpgsqlVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="coverlet.collector" Version="6.0.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.2" />
<PackageVersion Include="Fody" Version="6.8.0" />
<PackageVersion Include="InfoOf.Fody" Version="2.1.1" />
<PackageVersion Include="MartinCostello.Logging.XUnit" Version="0.3.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="8.0.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="9.0.0-preview.24165.2" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="$(NetRuntime)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="$(NetRuntime)" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="$(NetRuntime)" />
Expand All @@ -32,8 +32,8 @@
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="$(NpgsqlVersion)" />
<PackageVersion Include="SQLitePCLRaw.bundle_e_sqlite3" Version="2.1.8" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.556" />
<PackageVersion Include="xunit" Version="2.6.6" />
<PackageVersion Include="xunit" Version="2.7.1" />
<PackageVersion Include="xunit.skippablefact" Version="1.4.13" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.6" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.5.8" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,7 @@ public static class NpgsqlDbContextOptionsBuilderExtensions
/// <param name="builder">The build being used to configure Postgres.</param>
/// <returns>The same builder so that further configuration can be chained.</returns>
public static NpgsqlDbContextOptionsBuilder UseBinaryFunctions(
this NpgsqlDbContextOptionsBuilder builder)
{
return builder.AddOrUpdateExtension();
}
this NpgsqlDbContextOptionsBuilder builder) => builder.AddOrUpdateExtension();

private static NpgsqlDbContextOptionsBuilder AddOrUpdateExtension(
this NpgsqlDbContextOptionsBuilder builder)
Expand All @@ -25,9 +22,9 @@ public static class NpgsqlDbContextOptionsBuilderExtensions
var extension = coreOptionsBuilder.Options.FindExtension<NpgsqlDbContextOptionsExtension>() ?? new NpgsqlDbContextOptionsExtension();

((IDbContextOptionsBuilderInfrastructure)coreOptionsBuilder).AddOrUpdateExtension(extension);
coreOptionsBuilder.ReplaceService<IRelationalTypeMappingSource, BinaryNpgsqlTypeMappingSource>();
coreOptionsBuilder.ReplaceService<IQuerySqlGeneratorFactory, BinaryNpgsqlQuerySqlGeneratorFactory>();
coreOptionsBuilder.ReplaceService<IBinaryTranslatorPluginFactory, NpgsqlBinaryTranslatorPluginFactory>();
_ = coreOptionsBuilder.ReplaceService<IRelationalTypeMappingSource, BinaryNpgsqlTypeMappingSource>();
_ = coreOptionsBuilder.ReplaceService<IQuerySqlGeneratorFactory, BinaryNpgsqlQuerySqlGeneratorFactory>();
_ = coreOptionsBuilder.ReplaceService<IBinaryTranslatorPluginFactory, NpgsqlBinaryTranslatorPluginFactory>();

return builder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,9 @@ public void Validate(IDbContextOptions options)
{
}

private sealed class ExtensionInfo : BinaryFunctions.Infrastructure.Internal.ExtensionInfo
private sealed class ExtensionInfo(IDbContextOptionsExtension extension) : BinaryFunctions.Infrastructure.Internal.ExtensionInfo(extension)
{
public ExtensionInfo(IDbContextOptionsExtension extension)
: base(extension)
{
}

private new NpgsqlDbContextOptionsExtension Extension
public override IDbContextOptionsExtension Extension
=> (NpgsqlDbContextOptionsExtension)base.Extension;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/// <summary>
/// Query SQL generator for Npgsql which includes binary operations.
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "Multiple versions")]
public class BinaryNpgsqlQuerySqlGenerator : NpgsqlQuerySqlGenerator
{
#if !EF_CORE_7 && !EF_CORE_6
Expand Down Expand Up @@ -31,6 +32,7 @@ public BinaryNpgsqlQuerySqlGenerator(QuerySqlGeneratorDependencies dependencies,
#endif

/// <inheritdoc/>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0072:Add missing cases", Justification = "Only interested in Add for binary")]
protected override string GetOperator(SqlBinaryExpression e)
=> e.OperatorType switch
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
/// <summary>
/// Factory for generating <see cref="BinaryNpgsqlQuerySqlGenerator"/>.
/// </summary>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Style", "IDE0290:Use primary constructor", Justification = "Multiple versions")]
public class BinaryNpgsqlQuerySqlGeneratorFactory : NpgsqlQuerySqlGeneratorFactory
{
private readonly QuerySqlGeneratorDependencies dependencies;
Expand Down Expand Up @@ -39,11 +40,12 @@ public BinaryNpgsqlQuerySqlGeneratorFactory(QuerySqlGeneratorDependencies depend
}
#endif

/// <inheritdoc/>
#if !EF_CORE_7 && !EF_CORE_6
/// <inheritdoc/>
public override QuerySqlGenerator Create()
=> new BinaryNpgsqlQuerySqlGenerator(dependencies, relationalTypeMappingSource, npgsqlOptions.ReverseNullOrderingEnabled, npgsqlOptions.PostgresVersion);
#else
/// <inheritdoc/>
public override QuerySqlGenerator Create()
=> new BinaryNpgsqlQuerySqlGenerator(dependencies, npgsqlOptions.ReverseNullOrderingEnabled, npgsqlOptions.PostgresVersion);
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,19 @@
/// <summary>
/// A SQL translator for binary functions in Postgres.
/// </summary>
public class NpgsqlBinaryTranslator : BinaryTranslator
/// <remarks>
/// Initializes a new instance of the <see cref="NpgsqlBinaryTranslator"/> class.
/// </remarks>
/// <param name="sqlExpressionFactory">Instance of sql expression factory.</param>
/// <param name="relationalTypeMappingSource">Instance relational type mapping source.</param>
public class NpgsqlBinaryTranslator(ISqlExpressionFactory sqlExpressionFactory, IRelationalTypeMappingSource relationalTypeMappingSource) : BinaryTranslator(sqlExpressionFactory, relationalTypeMappingSource)
{
private static readonly bool[] LPadArgumentsPropagateNullability = [true, false, false];
private static readonly bool[] DecodeArgumentsPropagateNullabilityArray = [true, false];
private static readonly bool[] ToHexArgumentsPropagateNullabilityArray = [true];

private readonly ISqlExpressionFactory sqlExpressionFactory;
private readonly RelationalTypeMapping? byteArrayTypeMapping;

/// <summary>
/// Initializes a new instance of the <see cref="NpgsqlBinaryTranslator"/> class.
/// </summary>
/// <param name="sqlExpressionFactory">Instance of sql expression factory.</param>
/// <param name="relationalTypeMappingSource">Instance relational type mapping source.</param>
public NpgsqlBinaryTranslator(ISqlExpressionFactory sqlExpressionFactory, IRelationalTypeMappingSource relationalTypeMappingSource)
: base(sqlExpressionFactory, relationalTypeMappingSource)
{
this.sqlExpressionFactory = sqlExpressionFactory;
byteArrayTypeMapping = relationalTypeMappingSource.FindMapping(typeof(byte[]));
}
private readonly ISqlExpressionFactory sqlExpressionFactory = sqlExpressionFactory;
private readonly RelationalTypeMapping? byteArrayTypeMapping = relationalTypeMappingSource.FindMapping(typeof(byte[]));

/// <inheritdoc/>
protected override SqlExpression BinaryCast(SqlExpression sqlExpression, Type toType)
Expand All @@ -42,7 +35,7 @@ protected override SqlExpression BinaryCast(SqlExpression sqlExpression, Type to
protected override SqlExpression GetBytes(SqlExpression sqlExpression)
{
// Generate an expression like this: decode(LPAD(to_hex(r."SomeInt"), 8, '0'), 'hex')::bytea
var toHex = sqlExpressionFactory.Function("to_hex", new[] { sqlExpression }, true, ToHexArgumentsPropagateNullabilityArray, typeof(string));
var toHex = sqlExpressionFactory.Function("to_hex", [sqlExpression], true, ToHexArgumentsPropagateNullabilityArray, typeof(string));
var type = sqlExpression.Type;
int sizeOfType;
if (type == typeof(DateTime))
Expand All @@ -60,8 +53,8 @@ protected override SqlExpression GetBytes(SqlExpression sqlExpression)
var byteSize = new SqlConstantExpression(Expression.Constant(sizeOfType * 2), null);
var zero = new SqlConstantExpression(Expression.Constant("0"), null);
var hex = new SqlConstantExpression(Expression.Constant("hex"), null);
var lPad = sqlExpressionFactory.Function("LPAD", new SqlExpression[] { toHex, byteSize, zero }, true, LPadArgumentsPropagateNullability, typeof(string));
var decode = sqlExpressionFactory.Function("decode", new SqlExpression[] { lPad, hex }, true, DecodeArgumentsPropagateNullabilityArray, typeof(string), byteArrayTypeMapping);
var lPad = sqlExpressionFactory.Function("LPAD", [toHex, byteSize, zero], true, LPadArgumentsPropagateNullability, typeof(string));
var decode = sqlExpressionFactory.Function("decode", [lPad, hex], true, DecodeArgumentsPropagateNullabilityArray, typeof(string), byteArrayTypeMapping);
return new SqlUnaryExpression(ExpressionType.Convert, decode, typeof(byte[]), byteArrayTypeMapping);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,15 @@
/// <summary>
/// Binary translator plugin factory for Postgres provider.
/// </summary>
public class NpgsqlBinaryTranslatorPluginFactory : BinaryTranslatorPluginFactory
/// <remarks>
/// Initializes a new instance of the <see cref="NpgsqlBinaryTranslatorPluginFactory"/> class.
/// </remarks>
/// <param name="sqlExpressionFactory">Instance of sql expression factory.</param>
/// <param name="relationalTypeMappingSource">Instance relational type mapping source.</param>
public class NpgsqlBinaryTranslatorPluginFactory(ISqlExpressionFactory sqlExpressionFactory, IRelationalTypeMappingSource relationalTypeMappingSource) : BinaryTranslatorPluginFactory(sqlExpressionFactory, relationalTypeMappingSource)
{
private readonly ISqlExpressionFactory sqlExpressionFactory;
private readonly IRelationalTypeMappingSource relationalTypeMappingSource;

/// <summary>
/// Initializes a new instance of the <see cref="NpgsqlBinaryTranslatorPluginFactory"/> class.
/// </summary>
/// <param name="sqlExpressionFactory">Instance of sql expression factory.</param>
/// <param name="relationalTypeMappingSource">Instance relational type mapping source.</param>
public NpgsqlBinaryTranslatorPluginFactory(ISqlExpressionFactory sqlExpressionFactory, IRelationalTypeMappingSource relationalTypeMappingSource)
: base(sqlExpressionFactory, relationalTypeMappingSource)
{
this.sqlExpressionFactory = sqlExpressionFactory;
this.relationalTypeMappingSource = relationalTypeMappingSource;
}
private readonly ISqlExpressionFactory sqlExpressionFactory = sqlExpressionFactory;
private readonly IRelationalTypeMappingSource relationalTypeMappingSource = relationalTypeMappingSource;

/// <inheritdoc/>
public override BinaryTranslator Create()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,15 @@
/// <summary>
/// Binary type mapping source for Postgres provider.
/// </summary>
public class BinaryNpgsqlTypeMappingSource : NpgsqlTypeMappingSource
/// <remarks>
/// Initializes a new instance of the <see cref="BinaryNpgsqlTypeMappingSource"/> class.
/// </remarks>
/// <param name="dependencies">Type mapping source dependencies.</param>
/// <param name="relationalDependencies">Relational type mapping source dependencies.</param>
/// <param name="sqlGenerationHelper">sqlGenerationHelper.</param>
/// <param name="npgsqlOptions">Npgsql Options.</param>
public class BinaryNpgsqlTypeMappingSource(TypeMappingSourceDependencies dependencies, RelationalTypeMappingSourceDependencies relationalDependencies, ISqlGenerationHelper sqlGenerationHelper, INpgsqlSingletonOptions npgsqlOptions) : NpgsqlTypeMappingSource(dependencies, relationalDependencies, sqlGenerationHelper, npgsqlOptions)
{
/// <summary>
/// Initializes a new instance of the <see cref="BinaryNpgsqlTypeMappingSource"/> class.
/// </summary>
/// <param name="dependencies">Type mapping source dependencies.</param>
/// <param name="relationalDependencies">Relational type mapping source dependencies.</param>
/// <param name="sqlGenerationHelper">sqlGenerationHelper.</param>
/// <param name="npgsqlOptions">Npgsql Options.</param>
public BinaryNpgsqlTypeMappingSource(TypeMappingSourceDependencies dependencies, RelationalTypeMappingSourceDependencies relationalDependencies, ISqlGenerationHelper sqlGenerationHelper, INpgsqlSingletonOptions npgsqlOptions)
: base(dependencies, relationalDependencies, sqlGenerationHelper, npgsqlOptions)
{
}

/*
protected override RelationalTypeMapping? FindMapping(in RelationalTypeMappingInfo mappingInfo)
{
Expand All @@ -29,7 +24,7 @@ public BinaryNpgsqlTypeMappingSource(TypeMappingSourceDependencies dependencies,
*/

// This is to turn an expression into a bit array.
// Unfortinately I didn't come across a good way of translating bit(n) into bytea
// Unfortunately I didn't come across a good way of translating bit(n) into bytea

/// <inheritdoc/>
protected override RelationalTypeMapping? FindBaseMapping(in RelationalTypeMappingInfo mappingInfo)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public static class SqlServerDbContextOptionsBuilderExtensions
public static SqlServerDbContextOptionsBuilder UseBinaryFunctions(
this SqlServerDbContextOptionsBuilder builder)
{
builder.AddOrUpdateExtension();
_ = builder.AddOrUpdateExtension();
return builder;
}

Expand All @@ -26,8 +26,8 @@ public static class SqlServerDbContextOptionsBuilderExtensions
var extension = coreOptionsBuilder.Options.FindExtension<SqlServerDbContextOptionsExtension>() ?? new SqlServerDbContextOptionsExtension();

((IDbContextOptionsBuilderInfrastructure)coreOptionsBuilder).AddOrUpdateExtension(extension);
coreOptionsBuilder.ReplaceService<IRelationalTypeMappingSource, BinarySqlServerTypeMappingSource>();
coreOptionsBuilder.ReplaceService<IBinaryTranslatorPluginFactory, SqlServerBinaryTranslatorPluginFactory>();
_ = coreOptionsBuilder.ReplaceService<IRelationalTypeMappingSource, BinarySqlServerTypeMappingSource>();
_ = coreOptionsBuilder.ReplaceService<IBinaryTranslatorPluginFactory, SqlServerBinaryTranslatorPluginFactory>();

return builder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
/// <summary>
/// A SQL translator for binary functions in SQL Server.
/// </summary>
public class SqlServerBinaryTranslator : BinaryTranslator
/// <remarks>
/// Initializes a new instance of the <see cref="SqlServerBinaryTranslator"/> class.
/// </remarks>
/// <param name="sqlExpressionFactory">Instance of sql expression factory.</param>
/// <param name="relationalTypeMappingSource">Instance relational type mapping source.</param>
public class SqlServerBinaryTranslator(ISqlExpressionFactory sqlExpressionFactory, IRelationalTypeMappingSource relationalTypeMappingSource) : BinaryTranslator(sqlExpressionFactory, relationalTypeMappingSource)
{
private static readonly bool[] SignArgumentsPropagateNullability = [true];
private static readonly bool[] PowerArgumentsPropagateNullability = [false, false];
Expand All @@ -26,18 +31,7 @@ public class SqlServerBinaryTranslator : BinaryTranslator
var x0010000000000000 = GetBytes(new SqlConstantExpression(Expression.Constant(0x0010000000000000), null));
* */

private readonly ISqlExpressionFactory sqlExpressionFactory;

/// <summary>
/// Initializes a new instance of the <see cref="SqlServerBinaryTranslator"/> class.
/// </summary>
/// <param name="sqlExpressionFactory">Instance of sql expression factory.</param>
/// <param name="relationalTypeMappingSource">Instance relational type mapping source.</param>
public SqlServerBinaryTranslator(ISqlExpressionFactory sqlExpressionFactory, IRelationalTypeMappingSource relationalTypeMappingSource)
: base(sqlExpressionFactory, relationalTypeMappingSource)
{
this.sqlExpressionFactory = sqlExpressionFactory;
}
private readonly ISqlExpressionFactory sqlExpressionFactory = sqlExpressionFactory;

/// <inheritdoc/>
protected override SqlExpression ToValue(SqlExpression sqlExpression, Type type)
Expand All @@ -60,7 +54,7 @@ private SqlBinaryExpression ToDouble(SqlExpression sqlExpression)
var sql1023 = new SqlConstantExpression(Expression.Constant(1023), null);

// Line 1
var l1 = sqlExpressionFactory.Function("SIGN", new[] { colNameBigInt }, true, SignArgumentsPropagateNullability, colNameBigInt.Type);
var l1 = sqlExpressionFactory.Function("SIGN", [colNameBigInt], true, SignArgumentsPropagateNullability, colNameBigInt.Type);

// Line 2
var l2e1 = new SqlBinaryExpression(ExpressionType.And, colNameBigInt, X000FFFFFFFFFFFFF, typeof(long), null);
Expand All @@ -72,7 +66,7 @@ private SqlBinaryExpression ToDouble(SqlExpression sqlExpression)
var l3e1 = new SqlBinaryExpression(ExpressionType.And, colNameBigInt, X7ff0000000000000, typeof(long), null);
var l3e2 = new SqlBinaryExpression(ExpressionType.Divide, l3e1, X0010000000000000, typeof(long), null);
var l3e3 = new SqlBinaryExpression(ExpressionType.Subtract, l3e2, sql1023, typeof(long), null);
var l3 = sqlExpressionFactory.Function("POWER", new SqlExpression[] { TwoFloat, l3e3 }, false, PowerArgumentsPropagateNullability, colNameBigInt.Type);
var l3 = sqlExpressionFactory.Function("POWER", [TwoFloat, l3e3], false, PowerArgumentsPropagateNullability, colNameBigInt.Type);

var l1l2 = new SqlBinaryExpression(ExpressionType.Multiply, l1, l2, typeof(double), null);
var final = new SqlBinaryExpression(ExpressionType.Multiply, l1l2, l3, typeof(double), null);
Expand Down
Loading

0 comments on commit 47ee3d0

Please sign in to comment.