diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 32e76a6e81..575923d62c 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -3,7 +3,7 @@
"isRoot": true,
"tools": {
"jetbrains.resharper.globaltools": {
- "version": "2023.3.1",
+ "version": "2023.3.2",
"commands": [
"jb"
]
@@ -27,4 +27,4 @@
]
}
}
-}
+}
\ No newline at end of file
diff --git a/JsonApiDotNetCore.sln.DotSettings b/JsonApiDotNetCore.sln.DotSettings
index a945c3a40d..6e4e064588 100644
--- a/JsonApiDotNetCore.sln.DotSettings
+++ b/JsonApiDotNetCore.sln.DotSettings
@@ -54,6 +54,7 @@ JsonApiDotNetCore.ArgumentGuard.NotNull($EXPR$);
WARNING
WARNING
WARNING
+ DO_NOT_SHOW
WARNING
SUGGESTION
HINT
@@ -95,6 +96,7 @@ JsonApiDotNetCore.ArgumentGuard.NotNull($EXPR$);
SUGGESTION
SUGGESTION
WARNING
+ True
SUGGESTION
<?xml version="1.0" encoding="utf-16"?><Profile name="JADNC Full Cleanup"><XMLReformatCode>True</XMLReformatCode><CSCodeStyleAttributes ArrangeTypeAccessModifier="True" ArrangeTypeMemberAccessModifier="True" SortModifiers="True" RemoveRedundantParentheses="True" AddMissingParentheses="True" ArrangeBraces="True" ArrangeAttributes="True" ArrangeArgumentsStyle="True" ArrangeCodeBodyStyle="True" ArrangeVarStyle="True" ArrangeTrailingCommas="True" ArrangeObjectCreation="True" ArrangeDefaultValue="True" ArrangeNamespaces="True" ArrangeNullCheckingPattern="True" /><CssAlphabetizeProperties>True</CssAlphabetizeProperties><JsInsertSemicolon>True</JsInsertSemicolon><FormatAttributeQuoteDescriptor>True</FormatAttributeQuoteDescriptor><CorrectVariableKindsDescriptor>True</CorrectVariableKindsDescriptor><VariablesToInnerScopesDescriptor>True</VariablesToInnerScopesDescriptor><StringToTemplatesDescriptor>True</StringToTemplatesDescriptor><JsReformatCode>True</JsReformatCode><JsFormatDocComments>True</JsFormatDocComments><RemoveRedundantQualifiersTs>True</RemoveRedundantQualifiersTs><OptimizeImportsTs>True</OptimizeImportsTs><OptimizeReferenceCommentsTs>True</OptimizeReferenceCommentsTs><PublicModifierStyleTs>True</PublicModifierStyleTs><ExplicitAnyTs>True</ExplicitAnyTs><TypeAnnotationStyleTs>True</TypeAnnotationStyleTs><RelativePathStyleTs>True</RelativePathStyleTs><AsInsteadOfCastTs>True</AsInsteadOfCastTs><HtmlReformatCode>True</HtmlReformatCode><AspOptimizeRegisterDirectives>True</AspOptimizeRegisterDirectives><RemoveCodeRedundancies>True</RemoveCodeRedundancies><CSUseAutoProperty>True</CSUseAutoProperty><CSMakeFieldReadonly>True</CSMakeFieldReadonly><CSMakeAutoPropertyGetOnly>True</CSMakeAutoPropertyGetOnly><CSArrangeQualifiers>True</CSArrangeQualifiers><CSFixBuiltinTypeReferences>True</CSFixBuiltinTypeReferences><CssReformatCode>True</CssReformatCode><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings></CSOptimizeUsings><CSShortenReferences>True</CSShortenReferences><CSReformatCode>True</CSReformatCode><CSharpFormatDocComments>True</CSharpFormatDocComments><CSReorderTypeMembers>True</CSReorderTypeMembers><XAMLCollapseEmptyTags>False</XAMLCollapseEmptyTags><CSReformatInactiveBranches>True</CSReformatInactiveBranches></Profile>
JADNC Full Cleanup
@@ -154,6 +156,7 @@ JsonApiDotNetCore.ArgumentGuard.NotNull($EXPR$);
WRAP_IF_LONG
CHOP_ALWAYS
CHOP_ALWAYS
+ WRAP_IF_LONG
True
True
2
diff --git a/WarningSeverities.DotSettings b/WarningSeverities.DotSettings
index f8ac8e1515..a0fae5acd2 100644
--- a/WarningSeverities.DotSettings
+++ b/WarningSeverities.DotSettings
@@ -69,6 +69,7 @@
WARNING
WARNING
WARNING
+ WARNING
WARNING
WARNING
WARNING
@@ -197,6 +198,7 @@
WARNING
WARNING
WARNING
+ WARNING
WARNING
WARNING
WARNING
diff --git a/benchmarks/Program.cs b/benchmarks/Program.cs
index 818b9ab5e5..b1e3307931 100644
--- a/benchmarks/Program.cs
+++ b/benchmarks/Program.cs
@@ -9,14 +9,13 @@ internal static class Program
{
private static void Main(string[] args)
{
- var switcher = new BenchmarkSwitcher(new[]
- {
+ var switcher = new BenchmarkSwitcher([
typeof(ResourceDeserializationBenchmarks),
typeof(OperationsDeserializationBenchmarks),
typeof(ResourceSerializationBenchmarks),
typeof(OperationsSerializationBenchmarks),
typeof(QueryStringParserBenchmarks)
- });
+ ]);
switcher.Run(args);
}
diff --git a/cleanupcode.ps1 b/cleanupcode.ps1
index 237f854be3..b35d1cb215 100644
--- a/cleanupcode.ps1
+++ b/cleanupcode.ps1
@@ -28,12 +28,12 @@ if ($revision) {
if ($baseCommitHash -eq $headCommitHash) {
Write-Output "Running code cleanup on staged/unstaged files."
- dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb --dotnetcoresdk=$(dotnet --version) --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --properties:RunAnalyzers=false-- jb --verbosity=WARN -f staged,modified
+ dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb --dotnetcoresdk=$(dotnet --version) --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --properties:RunAnalyzers=false --jb --verbosity=WARN -f staged,modified
VerifySuccessExitCode
}
else {
Write-Output "Running code cleanup on commit range $baseCommitHash..$headCommitHash, including staged/unstaged files."
- dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb --dotnetcoresdk=$(dotnet --version) --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --properties:RunAnalyzers=false-- jb --verbosity=WARN -f staged,modified,commits -a $headCommitHash -b $baseCommitHash
+ dotnet regitlint -s JsonApiDotNetCore.sln --print-command --skip-tool-check --max-runs=5 --jb --dotnetcoresdk=$(dotnet --version) --jb-profile="JADNC Full Cleanup" --jb --properties:Configuration=Release --jb --properties:RunAnalyzers=false --jb --verbosity=WARN -f staged,modified,commits -a $headCommitHash -b $baseCommitHash
VerifySuccessExitCode
}
}
diff --git a/src/Examples/DapperExample/Controllers/OperationsController.cs b/src/Examples/DapperExample/Controllers/OperationsController.cs
index 979e6c9cd7..6fe0eedd1d 100644
--- a/src/Examples/DapperExample/Controllers/OperationsController.cs
+++ b/src/Examples/DapperExample/Controllers/OperationsController.cs
@@ -6,11 +6,6 @@
namespace DapperExample.Controllers;
-public sealed class OperationsController : JsonApiOperationsController
-{
- public OperationsController(IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor,
- IJsonApiRequest request, ITargetedFields targetedFields)
- : base(options, resourceGraph, loggerFactory, processor, request, targetedFields)
- {
- }
-}
+public sealed class OperationsController(
+ IJsonApiOptions options, IResourceGraph resourceGraph, ILoggerFactory loggerFactory, IOperationsProcessor processor, IJsonApiRequest request,
+ ITargetedFields targetedFields) : JsonApiOperationsController(options, resourceGraph, loggerFactory, processor, request, targetedFields);
diff --git a/src/Examples/DapperExample/Data/RotatingList.cs b/src/Examples/DapperExample/Data/RotatingList.cs
index 67c19bea4a..278c34140a 100644
--- a/src/Examples/DapperExample/Data/RotatingList.cs
+++ b/src/Examples/DapperExample/Data/RotatingList.cs
@@ -16,16 +16,11 @@ public static RotatingList Create(int count, Func createElement)
}
}
-internal sealed class RotatingList
+internal sealed class RotatingList(IList elements)
{
private int _index = -1;
- public IList Elements { get; }
-
- public RotatingList(IList elements)
- {
- Elements = elements;
- }
+ public IList Elements { get; } = elements;
public T GetNext()
{
diff --git a/src/Examples/DapperExample/Repositories/ResultSetMapper.cs b/src/Examples/DapperExample/Repositories/ResultSetMapper.cs
index 61421d7331..4352b6c552 100644
--- a/src/Examples/DapperExample/Repositories/ResultSetMapper.cs
+++ b/src/Examples/DapperExample/Repositories/ResultSetMapper.cs
@@ -166,14 +166,9 @@ public IReadOnlyCollection GetResources()
return _primaryResourcesInOrder.DistinctBy(resource => resource.Id).ToList();
}
- private sealed class IncludeElementWalker
+ private sealed class IncludeElementWalker(IncludeExpression include)
{
- private readonly IncludeExpression _include;
-
- public IncludeElementWalker(IncludeExpression include)
- {
- _include = include;
- }
+ private readonly IncludeExpression _include = include;
public IEnumerable BreadthFirstEnumerate()
{
diff --git a/src/Examples/DapperExample/TranslationToSql/Builders/DeleteOneToOneStatementBuilder.cs b/src/Examples/DapperExample/TranslationToSql/Builders/DeleteOneToOneStatementBuilder.cs
index 5a1293d41b..3ea368b299 100644
--- a/src/Examples/DapperExample/TranslationToSql/Builders/DeleteOneToOneStatementBuilder.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Builders/DeleteOneToOneStatementBuilder.cs
@@ -6,13 +6,8 @@
namespace DapperExample.TranslationToSql.Builders;
-internal sealed class DeleteOneToOneStatementBuilder : StatementBuilder
+internal sealed class DeleteOneToOneStatementBuilder(IDataModelService dataModelService) : StatementBuilder(dataModelService)
{
- public DeleteOneToOneStatementBuilder(IDataModelService dataModelService)
- : base(dataModelService)
- {
- }
-
public DeleteNode Build(ResourceType resourceType, string whereColumnName, object? whereValue)
{
ArgumentGuard.NotNull(resourceType);
diff --git a/src/Examples/DapperExample/TranslationToSql/Builders/DeleteResourceStatementBuilder.cs b/src/Examples/DapperExample/TranslationToSql/Builders/DeleteResourceStatementBuilder.cs
index 41794e8883..1910075a8c 100644
--- a/src/Examples/DapperExample/TranslationToSql/Builders/DeleteResourceStatementBuilder.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Builders/DeleteResourceStatementBuilder.cs
@@ -6,13 +6,8 @@
namespace DapperExample.TranslationToSql.Builders;
-internal sealed class DeleteResourceStatementBuilder : StatementBuilder
+internal sealed class DeleteResourceStatementBuilder(IDataModelService dataModelService) : StatementBuilder(dataModelService)
{
- public DeleteResourceStatementBuilder(IDataModelService dataModelService)
- : base(dataModelService)
- {
- }
-
public DeleteNode Build(ResourceType resourceType, params object[] idValues)
{
ArgumentGuard.NotNull(resourceType);
diff --git a/src/Examples/DapperExample/TranslationToSql/Builders/InsertStatementBuilder.cs b/src/Examples/DapperExample/TranslationToSql/Builders/InsertStatementBuilder.cs
index 7e444b45a1..5f8374df65 100644
--- a/src/Examples/DapperExample/TranslationToSql/Builders/InsertStatementBuilder.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Builders/InsertStatementBuilder.cs
@@ -6,13 +6,8 @@
namespace DapperExample.TranslationToSql.Builders;
-internal sealed class InsertStatementBuilder : StatementBuilder
+internal sealed class InsertStatementBuilder(IDataModelService dataModelService) : StatementBuilder(dataModelService)
{
- public InsertStatementBuilder(IDataModelService dataModelService)
- : base(dataModelService)
- {
- }
-
public InsertNode Build(ResourceType resourceType, IReadOnlyDictionary columnsToSet)
{
ArgumentGuard.NotNull(resourceType);
diff --git a/src/Examples/DapperExample/TranslationToSql/Builders/SqlQueryBuilder.cs b/src/Examples/DapperExample/TranslationToSql/Builders/SqlQueryBuilder.cs
index 3e3d48eb10..a082d3ecad 100644
--- a/src/Examples/DapperExample/TranslationToSql/Builders/SqlQueryBuilder.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Builders/SqlQueryBuilder.cs
@@ -8,7 +8,7 @@ namespace DapperExample.TranslationToSql.Builders;
///
/// Converts s into SQL text.
///
-internal sealed class SqlQueryBuilder : SqlTreeNodeVisitor
+internal sealed class SqlQueryBuilder(DatabaseProvider databaseProvider) : SqlTreeNodeVisitor
{
private static readonly char[] SpecialCharactersInLikeDefault =
[
@@ -26,7 +26,7 @@ internal sealed class SqlQueryBuilder : SqlTreeNodeVisitor _parametersByName = [];
private int _indentDepth;
@@ -35,11 +35,6 @@ internal sealed class SqlQueryBuilder : SqlTreeNodeVisitor Parameters => _parametersByName.Values.ToDictionary(parameter => parameter.Name, parameter => parameter.Value);
- public SqlQueryBuilder(DatabaseProvider databaseProvider)
- {
- _databaseProvider = databaseProvider;
- }
-
public string GetCommand(SqlTreeNode node)
{
ArgumentGuard.NotNull(node);
@@ -488,14 +483,9 @@ private IDisposable Indent()
return new RevertIndentOnDispose(this);
}
- private sealed class RevertIndentOnDispose : IDisposable
+ private sealed class RevertIndentOnDispose(SqlQueryBuilder owner) : IDisposable
{
- private readonly SqlQueryBuilder _owner;
-
- public RevertIndentOnDispose(SqlQueryBuilder owner)
- {
- _owner = owner;
- }
+ private readonly SqlQueryBuilder _owner = owner;
public void Dispose()
{
diff --git a/src/Examples/DapperExample/TranslationToSql/Builders/UpdateClearOneToOneStatementBuilder.cs b/src/Examples/DapperExample/TranslationToSql/Builders/UpdateClearOneToOneStatementBuilder.cs
index 4ccc5fec9a..712561528d 100644
--- a/src/Examples/DapperExample/TranslationToSql/Builders/UpdateClearOneToOneStatementBuilder.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Builders/UpdateClearOneToOneStatementBuilder.cs
@@ -6,13 +6,8 @@
namespace DapperExample.TranslationToSql.Builders;
-internal sealed class UpdateClearOneToOneStatementBuilder : StatementBuilder
+internal sealed class UpdateClearOneToOneStatementBuilder(IDataModelService dataModelService) : StatementBuilder(dataModelService)
{
- public UpdateClearOneToOneStatementBuilder(IDataModelService dataModelService)
- : base(dataModelService)
- {
- }
-
public UpdateNode Build(ResourceType resourceType, string setColumnName, string whereColumnName, object? whereValue)
{
ArgumentGuard.NotNull(resourceType);
diff --git a/src/Examples/DapperExample/TranslationToSql/Builders/UpdateResourceStatementBuilder.cs b/src/Examples/DapperExample/TranslationToSql/Builders/UpdateResourceStatementBuilder.cs
index 62fc3b7e20..a279ad45e5 100644
--- a/src/Examples/DapperExample/TranslationToSql/Builders/UpdateResourceStatementBuilder.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Builders/UpdateResourceStatementBuilder.cs
@@ -6,13 +6,8 @@
namespace DapperExample.TranslationToSql.Builders;
-internal sealed class UpdateResourceStatementBuilder : StatementBuilder
+internal sealed class UpdateResourceStatementBuilder(IDataModelService dataModelService) : StatementBuilder(dataModelService)
{
- public UpdateResourceStatementBuilder(IDataModelService dataModelService)
- : base(dataModelService)
- {
- }
-
public UpdateNode Build(ResourceType resourceType, IReadOnlyDictionary columnsToUpdate, params object[] idValues)
{
ArgumentGuard.NotNull(resourceType);
diff --git a/src/Examples/DapperExample/TranslationToSql/DataModel/FromEntitiesDataModelService.cs b/src/Examples/DapperExample/TranslationToSql/DataModel/FromEntitiesDataModelService.cs
index 0f030debdb..b0ba38f3a5 100644
--- a/src/Examples/DapperExample/TranslationToSql/DataModel/FromEntitiesDataModelService.cs
+++ b/src/Examples/DapperExample/TranslationToSql/DataModel/FromEntitiesDataModelService.cs
@@ -12,7 +12,7 @@ namespace DapperExample.TranslationToSql.DataModel;
///
/// Derives foreign keys and connection strings from an existing Entity Framework Core model.
///
-public sealed class FromEntitiesDataModelService : BaseDataModelService
+public sealed class FromEntitiesDataModelService(IResourceGraph resourceGraph) : BaseDataModelService(resourceGraph)
{
private readonly Dictionary _foreignKeysByRelationship = [];
private readonly Dictionary _columnNullabilityPerAttribute = [];
@@ -21,11 +21,6 @@ public sealed class FromEntitiesDataModelService : BaseDataModelService
public override DatabaseProvider DatabaseProvider => AssertHasDatabaseProvider();
- public FromEntitiesDataModelService(IResourceGraph resourceGraph)
- : base(resourceGraph)
- {
- }
-
public void Initialize(DbContext dbContext)
{
_connectionString = dbContext.Database.GetConnectionString();
diff --git a/src/Examples/DapperExample/TranslationToSql/Generators/ParameterGenerator.cs b/src/Examples/DapperExample/TranslationToSql/Generators/ParameterGenerator.cs
index bd4df111fc..aaa328e68f 100644
--- a/src/Examples/DapperExample/TranslationToSql/Generators/ParameterGenerator.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Generators/ParameterGenerator.cs
@@ -20,11 +20,5 @@ public void Reset()
_nameGenerator.Reset();
}
- private sealed class ParameterNameGenerator : UniqueNameGenerator
- {
- public ParameterNameGenerator()
- : base("@p")
- {
- }
- }
+ private sealed class ParameterNameGenerator() : UniqueNameGenerator("@p");
}
diff --git a/src/Examples/DapperExample/TranslationToSql/Generators/TableAliasGenerator.cs b/src/Examples/DapperExample/TranslationToSql/Generators/TableAliasGenerator.cs
index 39d5d9d702..a63bfdc01a 100644
--- a/src/Examples/DapperExample/TranslationToSql/Generators/TableAliasGenerator.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Generators/TableAliasGenerator.cs
@@ -3,10 +3,4 @@ namespace DapperExample.TranslationToSql.Generators;
///
/// Generates a SQL table alias with a unique name.
///
-internal sealed class TableAliasGenerator : UniqueNameGenerator
-{
- public TableAliasGenerator()
- : base("t")
- {
- }
-}
+internal sealed class TableAliasGenerator() : UniqueNameGenerator("t");
diff --git a/src/Examples/DapperExample/TranslationToSql/Transformations/StaleColumnReferenceRewriter.cs b/src/Examples/DapperExample/TranslationToSql/Transformations/StaleColumnReferenceRewriter.cs
index 03692baf2d..a632c43e51 100644
--- a/src/Examples/DapperExample/TranslationToSql/Transformations/StaleColumnReferenceRewriter.cs
+++ b/src/Examples/DapperExample/TranslationToSql/Transformations/StaleColumnReferenceRewriter.cs
@@ -290,14 +290,9 @@ private IReadOnlyList VisitList(IEnumerable nodes, ColumnVisitMode mode
return nodes.Select(element => TypedVisit(element, mode)).ToList();
}
- private sealed class PopStackOnDispose : IDisposable
+ private sealed class PopStackOnDispose(Stack stack) : IDisposable
{
- private readonly Stack _stack;
-
- public PopStackOnDispose(Stack stack)
- {
- _stack = stack;
- }
+ private readonly Stack _stack = stack;
public void Dispose()
{
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInSelectNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInSelectNode.cs
index e4b79fe7eb..2be0561011 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInSelectNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInSelectNode.cs
@@ -10,18 +10,13 @@ namespace DapperExample.TranslationToSql.TreeNodes;
/// SELECT t2.Id AS Id0 FROM (SELECT t1.Id FROM Users AS t1) AS t2
/// ]]>.
///
-internal sealed class ColumnInSelectNode : ColumnNode
+internal sealed class ColumnInSelectNode(ColumnSelectorNode selector, string? tableAlias) : ColumnNode(GetColumnName(selector), selector.Column.Type,
+ tableAlias)
{
- public ColumnSelectorNode Selector { get; }
+ public ColumnSelectorNode Selector { get; } = selector;
public bool IsVirtual => Selector.Alias != null || Selector.Column is ColumnInSelectNode { IsVirtual: true };
- public ColumnInSelectNode(ColumnSelectorNode selector, string? tableAlias)
- : base(GetColumnName(selector), selector.Column.Type, tableAlias)
- {
- Selector = selector;
- }
-
private static string GetColumnName(ColumnSelectorNode selector)
{
ArgumentGuard.NotNull(selector);
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInTableNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInTableNode.cs
index 8e8aab29ce..cd605e72a4 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInTableNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/ColumnInTableNode.cs
@@ -8,13 +8,8 @@ namespace DapperExample.TranslationToSql.TreeNodes;
/// FROM Users AS t1
/// ]]>.
///
-internal sealed class ColumnInTableNode : ColumnNode
+internal sealed class ColumnInTableNode(string name, ColumnType type, string? tableAlias) : ColumnNode(name, type, tableAlias)
{
- public ColumnInTableNode(string name, ColumnType type, string? tableAlias)
- : base(name, type, tableAlias)
- {
- }
-
public override TResult Accept(SqlTreeNodeVisitor visitor, TArgument argument)
{
return visitor.VisitColumnInTable(this, argument);
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/CountSelectorNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/CountSelectorNode.cs
index 07ad67f144..d0b9e18ca2 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/CountSelectorNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/CountSelectorNode.cs
@@ -8,13 +8,8 @@ namespace DapperExample.TranslationToSql.TreeNodes;
/// SELECT COUNT(*) FROM Users
/// ]]>.
///
-internal sealed class CountSelectorNode : SelectorNode
+internal sealed class CountSelectorNode(string? alias) : SelectorNode(alias)
{
- public CountSelectorNode(string? alias)
- : base(alias)
- {
- }
-
public override TResult Accept(SqlTreeNodeVisitor visitor, TArgument argument)
{
return visitor.VisitCountSelector(this, argument);
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/FromNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/FromNode.cs
index 8ec4ab5c20..3d29636212 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/FromNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/FromNode.cs
@@ -5,13 +5,8 @@ namespace DapperExample.TranslationToSql.TreeNodes;
/// FROM Customers AS t1
/// ]]>.
///
-internal sealed class FromNode : TableAccessorNode
+internal sealed class FromNode(TableSourceNode source) : TableAccessorNode(source)
{
- public FromNode(TableSourceNode source)
- : base(source)
- {
- }
-
public override TResult Accept(SqlTreeNodeVisitor visitor, TArgument argument)
{
return visitor.VisitFrom(this, argument);
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/OneSelectorNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/OneSelectorNode.cs
index c86aea6d63..a9c05301a7 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/OneSelectorNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/OneSelectorNode.cs
@@ -8,13 +8,8 @@ namespace DapperExample.TranslationToSql.TreeNodes;
/// SELECT 1 FROM Users
/// ]]>.
///
-internal sealed class OneSelectorNode : SelectorNode
+internal sealed class OneSelectorNode(string? alias) : SelectorNode(alias)
{
- public OneSelectorNode(string? alias)
- : base(alias)
- {
- }
-
public override TResult Accept(SqlTreeNodeVisitor visitor, TArgument argument)
{
return visitor.VisitOneSelector(this, argument);
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/OrderByTermNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/OrderByTermNode.cs
index 2c3fc80b3e..89fb4c219d 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/OrderByTermNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/OrderByTermNode.cs
@@ -3,12 +3,7 @@ namespace DapperExample.TranslationToSql.TreeNodes;
///
/// Represents the base type for terms in an .
///
-internal abstract class OrderByTermNode : SqlTreeNode
+internal abstract class OrderByTermNode(bool isAscending) : SqlTreeNode
{
- public bool IsAscending { get; }
-
- protected OrderByTermNode(bool isAscending)
- {
- IsAscending = isAscending;
- }
+ public bool IsAscending { get; } = isAscending;
}
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/SelectorNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/SelectorNode.cs
index 8a47a8af66..44ee14ea17 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/SelectorNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/SelectorNode.cs
@@ -3,12 +3,7 @@ namespace DapperExample.TranslationToSql.TreeNodes;
///
/// Represents the base type for selectors in a .
///
-internal abstract class SelectorNode : SqlTreeNode
+internal abstract class SelectorNode(string? alias) : SqlTreeNode
{
- public string? Alias { get; }
-
- protected SelectorNode(string? alias)
- {
- Alias = alias;
- }
+ public string? Alias { get; } = alias;
}
diff --git a/src/Examples/DapperExample/TranslationToSql/TreeNodes/TableSourceNode.cs b/src/Examples/DapperExample/TranslationToSql/TreeNodes/TableSourceNode.cs
index 6628ed11dc..62ff5ad3ef 100644
--- a/src/Examples/DapperExample/TranslationToSql/TreeNodes/TableSourceNode.cs
+++ b/src/Examples/DapperExample/TranslationToSql/TreeNodes/TableSourceNode.cs
@@ -5,17 +5,12 @@ namespace DapperExample.TranslationToSql.TreeNodes;
///
/// Represents the base type for tabular data sources, such as database tables and sub-queries.
///
-internal abstract class TableSourceNode : SqlTreeNode
+internal abstract class TableSourceNode(string? alias) : SqlTreeNode
{
public const string IdColumnName = nameof(Identifiable