diff --git a/src/Connected.Data/DataStartup.cs b/src/Connected.Data/DataStartup.cs index dda0650..c713224 100644 --- a/src/Connected.Data/DataStartup.cs +++ b/src/Connected.Data/DataStartup.cs @@ -1,4 +1,5 @@ -using Connected.Annotations; +using System.Runtime.CompilerServices; +using Connected.Annotations; using Connected.Data.DataProtection; using Connected.Data.Schema; using Connected.Data.Sharding; @@ -7,6 +8,7 @@ using Connected.Entities.Storage; using Microsoft.Extensions.DependencyInjection; [assembly: MicroService(MicroServiceType.Sys)] +[assembly: InternalsVisibleTo("Connected.Data.Tests")] namespace Connected.Data; diff --git a/src/Connected.Expressions/Expressions/SelectExpression.cs b/src/Connected.Expressions/Expressions/SelectExpression.cs index 9ef1e30..a548d24 100644 --- a/src/Connected.Expressions/Expressions/SelectExpression.cs +++ b/src/Connected.Expressions/Expressions/SelectExpression.cs @@ -3,44 +3,67 @@ using Connected.Expressions.Formatters; using Connected.Expressions.Translation; using System.Collections.ObjectModel; using System.Linq.Expressions; +using System.Runtime.ExceptionServices; namespace Connected.Expressions; public sealed class SelectExpression : AliasedExpression { - public SelectExpression(Alias alias, IEnumerable columns, Expression from, Expression? where, - IEnumerable? orderBy, IEnumerable? groupBy, bool isDistinct, Expression? skip, Expression? take, bool isReverse) - : base(DatabaseExpressionType.Select, typeof(void), alias) - { - Columns = columns.ToReadOnly(); - IsDistinct = isDistinct; - From = from; - Where = where; - OrderBy = orderBy?.ToReadOnly(); - GroupBy = groupBy?.ToReadOnly(); - Take = take; - Skip = skip; - IsReverse = isReverse; - } - - public SelectExpression(Alias alias, IEnumerable columns, Expression from, Expression? where, IEnumerable? orderBy, IEnumerable? groupBy) - : this(alias, columns, from, where, orderBy, groupBy, false, null, null, false) - { - } - - public SelectExpression(Alias alias, IEnumerable columns, Expression from, Expression? where) - : this(alias, columns, from, where, null, null) - { - } - - public ReadOnlyCollection Columns { get; } - public Expression From { get; } - public Expression? Where { get; } - public ReadOnlyCollection? OrderBy { get; } - public ReadOnlyCollection? GroupBy { get; } - public bool IsDistinct { get; } - public Expression? Skip { get; } - public Expression? Take { get; } - public bool IsReverse { get; } - public string QueryText => SqlFormatter.Format(this); + public SelectExpression(Alias alias, IEnumerable columns, Expression from, Expression? where, + IEnumerable? orderBy, IEnumerable? groupBy, bool isDistinct, Expression? skip, Expression? take, bool isReverse) + : base(DatabaseExpressionType.Select, typeof(void), alias) + { + Columns = columns.ToReadOnly(); + IsDistinct = isDistinct; + From = from; + Where = where; + OrderBy = orderBy?.ToReadOnly(); + GroupBy = groupBy?.ToReadOnly(); + Take = take; + Skip = skip; + IsReverse = isReverse; + } + + public SelectExpression(Alias alias, IEnumerable columns, Expression from, Expression? where, IEnumerable? orderBy, IEnumerable? groupBy) + : this(alias, columns, from, where, orderBy, groupBy, false, null, null, false) + { + } + + public SelectExpression(Alias alias, IEnumerable columns, Expression from, Expression? where) + : this(alias, columns, from, where, null, null) + { + } + + public ReadOnlyCollection Columns { get; } + public Expression From { get; } + public Expression? Where { get; } + public ReadOnlyCollection? OrderBy { get; } + public ReadOnlyCollection? GroupBy { get; } + public bool IsDistinct { get; } + public Expression? Skip { get; } + public Expression? Take { get; } + public bool IsReverse { get; } + public string QueryText => SqlFormatter.Format(this); + + public override int GetHashCode() + { + return HashCode.Combine(HashCode.Combine(Alias, Columns, From, Where, OrderBy), GroupBy, IsDistinct, Skip, Take, IsReverse); + } + + public override bool Equals(object? obj) + { + if (obj is not SelectExpression second) + return false; + + return Alias.Equals(second.Alias) + && Columns.Equals(second.Columns) + && From.Equals(second.From) + && Where == second.Where + && OrderBy == second.OrderBy + && GroupBy == second.GroupBy + && IsDistinct == second.IsDistinct + && Skip == second.Skip + && Take == second.Take + && IsReverse == second.IsReverse; + } } \ No newline at end of file