From ef15f261a295f6e43228f439adfadf98545b4bea Mon Sep 17 00:00:00 2001 From: Smit Patel <smitpatel@users.noreply.github.com> Date: Wed, 17 Feb 2016 15:48:04 -0800 Subject: [PATCH] Generate Unique alias for table names --- .../Internal/IncludeExpressionVisitor.cs | 13 +- ...ationalEntityQueryableExpressionVisitor.cs | 2 +- .../Expressions/ISelectExpressionFactory.cs | 4 +- .../Query/Expressions/SelectExpression.cs | 82 ++- .../Expressions/SelectExpressionFactory.cs | 7 +- .../RelationalResultOperatorHandler.cs | 13 +- .../RelationalQueryCompilationContext.cs | 37 ++ .../NavigationRewritingExpressionVisitor.cs | 2 +- .../ComplexNavigationsQueryTestBase.cs | 37 ++ .../GearsOfWarQueryTestBase.cs | 92 ++-- .../IncludeTestBase.cs | 2 +- .../ComplexNavigationsQuerySqlServerTest.cs | 182 ++++--- .../FromSqlQuerySqlServerTest.cs | 8 +- .../GearsOfWarQuerySqlServerTest.cs | 257 +++++---- .../IncludeSqlServerTest.cs | 510 +++++++++--------- ...eritanceRelationshipsQuerySqlServerTest.cs | 126 ++--- .../InheritanceSqlServerTest.cs | 78 +-- .../QueryBugsTest.cs | 8 +- .../QueryLoggingSqlServerTest.cs | 8 +- .../QueryNavigationsSqlServerTest.cs | 70 +-- .../QuerySqlServerTest.cs | 317 ++++++----- .../RowNumberPagingTest.cs | 78 +-- .../ComplexNavigationsQuerySqliteTest.cs | 56 +- .../QuerySqliteTest.cs | 6 +- 24 files changed, 1069 insertions(+), 926 deletions(-) diff --git a/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/Internal/IncludeExpressionVisitor.cs b/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/Internal/IncludeExpressionVisitor.cs index df7adf4de69..52628219209 100644 --- a/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/Internal/IncludeExpressionVisitor.cs +++ b/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/Internal/IncludeExpressionVisitor.cs @@ -135,7 +135,7 @@ var targetTableExpression var targetEntityType = navigation.GetTargetType(); var targetTableName = _relationalAnnotationProvider.For(targetEntityType).TableName; - var targetTableAlias = targetTableName[0].ToString().ToLower(); + var targetTableAlias = _queryCompilationContext.CreateUniqueTableAlias(targetTableName[0].ToString().ToLower()); if (!navigation.IsCollection()) { @@ -179,7 +179,7 @@ var materializer selectExpression.Predicate = oldPredicate; selectExpression.RemoveTable(joinExpression); - selectExpression.AddTable(newJoinExpression); + selectExpression.AddTable(newJoinExpression, createUniqueAlias: false); joinExpression = newJoinExpression; } @@ -223,7 +223,7 @@ var principalTable OrderingDirection.Asc); } - var targetSelectExpression = _selectExpressionFactory.Create(); + var targetSelectExpression = _selectExpressionFactory.Create(_queryCompilationContext); targetTableExpression = new TableExpression( @@ -232,7 +232,7 @@ var principalTable targetTableAlias, querySource); - targetSelectExpression.AddTable(targetTableExpression); + targetSelectExpression.AddTable(targetTableExpression, createUniqueAlias: false); var materializer = _materializerFactory @@ -290,8 +290,9 @@ var innerJoinSelectExpression private JoinExpressionBase AdjustJoinExpression( SelectExpression selectExpression, JoinExpressionBase joinExpression) { - var subquery = new SelectExpression(_querySqlGeneratorFactory, joinExpression.Alias); - subquery.AddTable(joinExpression.TableExpression); + var subquery = new SelectExpression(_querySqlGeneratorFactory, _queryCompilationContext) { Alias = joinExpression.Alias }; + // Don't create new alias when adding tables to subquery + subquery.AddTable(joinExpression.TableExpression, createUniqueAlias: false); subquery.IsProjectStar = true; subquery.Predicate = selectExpression.Predicate; diff --git a/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/RelationalEntityQueryableExpressionVisitor.cs b/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/RelationalEntityQueryableExpressionVisitor.cs index 99aa116f237..28e88635126 100644 --- a/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/RelationalEntityQueryableExpressionVisitor.cs +++ b/src/Microsoft.EntityFrameworkCore.Relational/Query/ExpressionVisitors/RelationalEntityQueryableExpressionVisitor.cs @@ -117,7 +117,7 @@ protected override Expression VisitEntityQueryable(Type elementType) var relationalQueryCompilationContext = QueryModelVisitor.QueryCompilationContext; var entityType = _model.FindEntityType(elementType); - var selectExpression = _selectExpressionFactory.Create(); + var selectExpression = _selectExpressionFactory.Create(relationalQueryCompilationContext); QueryModelVisitor.AddQuery(_querySource, selectExpression); diff --git a/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/ISelectExpressionFactory.cs b/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/ISelectExpressionFactory.cs index 0cecedce11e..82e10e17de5 100644 --- a/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/ISelectExpressionFactory.cs +++ b/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/ISelectExpressionFactory.cs @@ -7,8 +7,8 @@ namespace Microsoft.EntityFrameworkCore.Query.Expressions { public interface ISelectExpressionFactory { - SelectExpression Create(); + SelectExpression Create([NotNull]RelationalQueryCompilationContext queryCompilationContext); - SelectExpression Create([NotNull] string alias); + SelectExpression Create([NotNull]RelationalQueryCompilationContext queryCompilationContext, [NotNull] string alias); } } diff --git a/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpression.cs b/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpression.cs index 4c0837d8dbc..47bfda45b69 100644 --- a/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpression.cs +++ b/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpression.cs @@ -22,6 +22,7 @@ public class SelectExpression : TableExpressionBase #endif private readonly IQuerySqlGeneratorFactory _querySqlGeneratorFactory; + private readonly RelationalQueryCompilationContext _queryCompilationContext; private readonly List<Expression> _projection = new List<Expression>(); private readonly List<TableExpressionBase> _tables = new List<TableExpressionBase>(); private readonly List<Ordering> _orderBy = new List<Ordering>(); @@ -35,22 +36,27 @@ public class SelectExpression : TableExpressionBase public virtual Expression Predicate { get; [param: CanBeNull] set; } - public SelectExpression([NotNull] IQuerySqlGeneratorFactory querySqlGeneratorFactory) + public SelectExpression([NotNull] IQuerySqlGeneratorFactory querySqlGeneratorFactory, + [NotNull] RelationalQueryCompilationContext queryCompilationContext) : base(null, null) { Check.NotNull(querySqlGeneratorFactory, nameof(querySqlGeneratorFactory)); + Check.NotNull(queryCompilationContext, nameof(queryCompilationContext)); _querySqlGeneratorFactory = querySqlGeneratorFactory; + _queryCompilationContext = queryCompilationContext; } public SelectExpression( [NotNull] IQuerySqlGeneratorFactory querySqlGeneratorFactory, + [NotNull] RelationalQueryCompilationContext queryCompilationContext, [NotNull] string alias) - : base(null, Check.NotNull(alias, nameof(alias))) + : this(querySqlGeneratorFactory, queryCompilationContext) { - Check.NotNull(querySqlGeneratorFactory, nameof(querySqlGeneratorFactory)); + Check.NotNull(alias, nameof(alias)); - _querySqlGeneratorFactory = querySqlGeneratorFactory; + // When assigning alias to select expression make it unique + Alias = queryCompilationContext.CreateUniqueTableAlias(alias); } public override Type Type => _projection.Count == 1 @@ -62,7 +68,7 @@ public virtual SelectExpression Clone([NotNull] string alias) Check.NotNull(alias, nameof(alias)); var selectExpression - = new SelectExpression(_querySqlGeneratorFactory, alias) + = new SelectExpression(_querySqlGeneratorFactory, _queryCompilationContext, alias) { _limit = _limit, _offset = _offset, @@ -84,13 +90,32 @@ var selectExpression public virtual bool IsProjectStar { get; set; } - public virtual void AddTable([NotNull] TableExpressionBase tableExpression) - => _tables.Add(Check.NotNull(tableExpression, nameof(tableExpression))); + public virtual void AddTable([NotNull] TableExpressionBase tableExpression, bool createUniqueAlias = true) + { + Check.NotNull(tableExpression, nameof(tableExpression)); + + if (createUniqueAlias) + { + tableExpression.Alias = _queryCompilationContext.CreateUniqueTableAlias(tableExpression.Alias); + } + _tables.Add(tableExpression); + } public virtual void AddTables([NotNull] IEnumerable<TableExpressionBase> tableExpressions) - => _tables.AddRange(Check.NotNull(tableExpressions, nameof(tableExpressions))); + { + Check.NotNull(tableExpressions, nameof(tableExpressions)); - public virtual void ClearTables() => _tables.Clear(); + // Multiple tables are added while moving current select expression inside subquery hence it does not need to generate unique alias + foreach (var tableExpression in tableExpressions.ToList()) + { + AddTable(tableExpression, createUniqueAlias: false); + } + } + + public virtual void ClearTables() + { + _tables.Clear(); + } public virtual bool IsCorrelated() => new CorrelationFindingExpressionVisitor().IsCorrelated(this); @@ -229,7 +254,7 @@ public virtual SelectExpression PushDownSubquery() { _subqueryDepth++; - var subquery = new SelectExpression(_querySqlGeneratorFactory, SystemAliasPrefix + _subqueryDepth); + var subquery = new SelectExpression(_querySqlGeneratorFactory, _queryCompilationContext, SystemAliasPrefix); var columnAliasCounter = 0; @@ -277,7 +302,7 @@ public virtual SelectExpression PushDownSubquery() ClearProjection(); ClearOrderBy(); - AddTable(subquery); + AddTable(subquery, createUniqueAlias: false); return subquery; } @@ -382,7 +407,7 @@ var projectionIndex if (alias != null) { - foreach (var orderByAliasExpression + foreach (var orderByAliasExpression in _orderBy.Select(o => o.Expression).OfType<AliasExpression>()) { if (orderByAliasExpression.TryGetColumnExpression() == null) @@ -625,8 +650,6 @@ public virtual void AddCrossJoin( Check.NotNull(tableExpression, nameof(tableExpression)); Check.NotNull(projection, nameof(projection)); - tableExpression.Alias = CreateUniqueTableAlias(tableExpression.Alias); - _tables.Add(new CrossJoinExpression(tableExpression)); _projection.AddRange(projection); } @@ -638,8 +661,6 @@ public virtual void AddLateralJoin( Check.NotNull(tableExpression, nameof(tableExpression)); Check.NotNull(projection, nameof(projection)); - tableExpression.Alias = CreateUniqueTableAlias(tableExpression.Alias); - _tables.Add(new LateralJoinExpression(tableExpression)); _projection.AddRange(projection); } @@ -658,8 +679,6 @@ public virtual JoinExpressionBase AddInnerJoin( Check.NotNull(tableExpression, nameof(tableExpression)); Check.NotNull(projection, nameof(projection)); - tableExpression.Alias = CreateUniqueTableAlias(tableExpression.Alias); - var innerJoinExpression = new InnerJoinExpression(tableExpression); _tables.Add(innerJoinExpression); @@ -682,8 +701,6 @@ public virtual JoinExpressionBase AddOuterJoin( Check.NotNull(tableExpression, nameof(tableExpression)); Check.NotNull(projection, nameof(projection)); - tableExpression.Alias = CreateUniqueTableAlias(tableExpression.Alias); - var outerJoinExpression = new LeftOuterJoinExpression(tableExpression); _tables.Add(outerJoinExpression); @@ -692,31 +709,6 @@ public virtual JoinExpressionBase AddOuterJoin( return outerJoinExpression; } - public virtual string CreateUniqueTableAlias() - => CreateUniqueTableAlias(SystemAliasPrefix); - - private string CreateUniqueTableAlias(string currentAlias) - { - Debug.Assert(currentAlias != null); - - var uniqueAlias = currentAlias; - var counter = 0; - - int _; - if (currentAlias.StartsWith(SystemAliasPrefix, StringComparison.Ordinal) - && int.TryParse(currentAlias.Substring(1), out _)) - { - currentAlias = SystemAliasPrefix; - } - - while (_tables.Any(t => string.Equals(t.Alias, uniqueAlias, StringComparison.OrdinalIgnoreCase))) - { - uniqueAlias = currentAlias + counter++; - } - - return uniqueAlias; - } - private string CreateUniqueProjectionAlias(string currentAlias) { var uniqueAlias = currentAlias ?? "A"; diff --git a/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpressionFactory.cs b/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpressionFactory.cs index 9647bccaa19..68af7604f13 100644 --- a/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpressionFactory.cs +++ b/src/Microsoft.EntityFrameworkCore.Relational/Query/Expressions/SelectExpressionFactory.cs @@ -18,12 +18,13 @@ public SelectExpressionFactory([NotNull] IQuerySqlGeneratorFactory querySqlGener _querySqlGeneratorFactory = querySqlGeneratorFactory; } - public virtual SelectExpression Create() - => new SelectExpression(_querySqlGeneratorFactory); + public virtual SelectExpression Create(RelationalQueryCompilationContext queryCompilationContext) + => new SelectExpression(_querySqlGeneratorFactory, queryCompilationContext); - public virtual SelectExpression Create(string alias) + public virtual SelectExpression Create(RelationalQueryCompilationContext queryCompilationContext, string alias) => new SelectExpression( _querySqlGeneratorFactory, + queryCompilationContext, Check.NotEmpty(alias, nameof(alias))); } } diff --git a/src/Microsoft.EntityFrameworkCore.Relational/Query/Internal/RelationalResultOperatorHandler.cs b/src/Microsoft.EntityFrameworkCore.Relational/Query/Internal/RelationalResultOperatorHandler.cs index 007cf0de87b..fa35c4336f0 100644 --- a/src/Microsoft.EntityFrameworkCore.Relational/Query/Internal/RelationalResultOperatorHandler.cs +++ b/src/Microsoft.EntityFrameworkCore.Relational/Query/Internal/RelationalResultOperatorHandler.cs @@ -165,7 +165,8 @@ var predicate if (predicate != null) { - var innerSelectExpression = handlerContext.SelectExpressionFactory.Create(); + var innerSelectExpression + = handlerContext.SelectExpressionFactory.Create(handlerContext.QueryModelVisitor.QueryCompilationContext); innerSelectExpression.AddTables(handlerContext.SelectExpression.Tables); innerSelectExpression.Predicate = Expression.Not(predicate); @@ -194,7 +195,7 @@ var predicate private static Expression HandleAny(HandlerContext handlerContext) { - var innerSelectExpression = handlerContext.SelectExpressionFactory.Create(); + var innerSelectExpression = handlerContext.SelectExpressionFactory.Create(handlerContext.QueryModelVisitor.QueryCompilationContext); innerSelectExpression.AddTables(handlerContext.SelectExpression.Tables); innerSelectExpression.Predicate = handlerContext.SelectExpression.Predicate; @@ -235,14 +236,14 @@ var filteringVisitor if (entityType != null) { - var outterSelectExpression = handlerContext.SelectExpressionFactory.Create(); + var outterSelectExpression = handlerContext.SelectExpressionFactory.Create(handlerContext.QueryModelVisitor.QueryCompilationContext); outterSelectExpression.SetProjectionExpression(Expression.Constant(1)); var collectionSelectExpression - = handlerContext.SelectExpression.Clone(outterSelectExpression.CreateUniqueTableAlias()); + = handlerContext.SelectExpression.Clone(handlerContext.QueryModelVisitor.QueryCompilationContext.CreateUniqueTableAlias()); outterSelectExpression.AddTable(collectionSelectExpression); - itemSelectExpression.Alias = outterSelectExpression.CreateUniqueTableAlias(); + itemSelectExpression.Alias = handlerContext.QueryModelVisitor.QueryCompilationContext.CreateUniqueTableAlias(); var joinExpression = outterSelectExpression.AddInnerJoin(itemSelectExpression); foreach (var property in entityType.FindPrimaryKey().Properties) @@ -333,7 +334,7 @@ private static Expression HandleDefaultIfEmpty(HandlerContext handlerContext) selectExpression.ClearTables(); - var emptySelectExpression = handlerContext.SelectExpressionFactory.Create("empty"); + var emptySelectExpression = handlerContext.SelectExpressionFactory.Create(handlerContext.QueryModelVisitor.QueryCompilationContext, "empty"); emptySelectExpression.AddToProjection(new AliasExpression("empty", Expression.Constant(null))); selectExpression.AddTable(emptySelectExpression); diff --git a/src/Microsoft.EntityFrameworkCore.Relational/Query/RelationalQueryCompilationContext.cs b/src/Microsoft.EntityFrameworkCore.Relational/Query/RelationalQueryCompilationContext.cs index 3e5fbf7a68c..2c2cd2972a6 100644 --- a/src/Microsoft.EntityFrameworkCore.Relational/Query/RelationalQueryCompilationContext.cs +++ b/src/Microsoft.EntityFrameworkCore.Relational/Query/RelationalQueryCompilationContext.cs @@ -3,7 +3,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; +using System.Text.RegularExpressions; using JetBrains.Annotations; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; @@ -20,6 +22,10 @@ public class RelationalQueryCompilationContext : QueryCompilationContext private readonly List<RelationalQueryModelVisitor> _relationalQueryModelVisitors = new List<RelationalQueryModelVisitor>(); + private const string SystemAliasPrefix = "t"; + private readonly IDictionary<string, int> _tableAliasCounterMap = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase); + private readonly ISet<string> _tableAliasSet = new HashSet<string>(StringComparer.OrdinalIgnoreCase); + public RelationalQueryCompilationContext( [NotNull] IModel model, [NotNull] ISensitiveDataLogger logger, @@ -78,5 +84,36 @@ public virtual SelectExpression FindSelectExpression([NotNull] IQuerySource quer select selectExpression) .First(); } + + public virtual string CreateUniqueTableAlias() + => CreateUniqueTableAlias(SystemAliasPrefix); + + public virtual string CreateUniqueTableAlias([NotNull] string currentAlias) + { + Check.NotNull(currentAlias, nameof(currentAlias)); + + if (currentAlias.Length == 0) + { + return currentAlias; + } + + var counter = 0; + var uniqueAlias = currentAlias; + + if (_tableAliasCounterMap.ContainsKey(currentAlias)) + { + counter = _tableAliasCounterMap[currentAlias]; + uniqueAlias += counter; + } + + while (_tableAliasSet.Contains(uniqueAlias)) + { + uniqueAlias = currentAlias + counter++; + } + _tableAliasCounterMap[currentAlias] = counter; + + _tableAliasSet.Add(uniqueAlias); + return uniqueAlias; + } } } diff --git a/src/Microsoft.EntityFrameworkCore/Query/ExpressionVisitors/Internal/NavigationRewritingExpressionVisitor.cs b/src/Microsoft.EntityFrameworkCore/Query/ExpressionVisitors/Internal/NavigationRewritingExpressionVisitor.cs index c30a757ecd9..5d3d5b34560 100644 --- a/src/Microsoft.EntityFrameworkCore/Query/ExpressionVisitors/Internal/NavigationRewritingExpressionVisitor.cs +++ b/src/Microsoft.EntityFrameworkCore/Query/ExpressionVisitors/Internal/NavigationRewritingExpressionVisitor.cs @@ -324,7 +324,7 @@ private Expression CreateSubqueryForNavigations( var mainFromClause = new MainFromClause( - _queryModel.GetNewName("subQuery"), + "subQuery", targetEntityType.ClrType, CreateEntityQueryable(targetEntityType)); var querySourceReference = new QuerySourceReferenceExpression(mainFromClause); diff --git a/test/Microsoft.EntityFrameworkCore.FunctionalTests/ComplexNavigationsQueryTestBase.cs b/test/Microsoft.EntityFrameworkCore.FunctionalTests/ComplexNavigationsQueryTestBase.cs index 33810274170..1045d60bafe 100644 --- a/test/Microsoft.EntityFrameworkCore.FunctionalTests/ComplexNavigationsQueryTestBase.cs +++ b/test/Microsoft.EntityFrameworkCore.FunctionalTests/ComplexNavigationsQueryTestBase.cs @@ -459,6 +459,43 @@ join e1 in levelOnes on e2.Id equals e1.OneToOne_Optional_FK?.Id } } + [ConditionalFact] + public virtual void Join_navigations_in_inner_selector_translated_to_multiple_subquery_without_collision() + { + List<Level1> levelOnes; + List<Level2> levelTwos; + List<Level3> levelThrees; + using (var context = CreateContext()) + { + levelOnes = context.LevelOne.Include(e => e.OneToOne_Optional_FK).ToList(); + levelTwos = context.LevelTwo.ToList(); + levelThrees = context.LevelThree.Include(e => e.OneToOne_Optional_FK_Inverse).ToList(); + } + + ClearLog(); + + using (var context = CreateContext()) + { + var query = from e2 in context.LevelTwo + join e1 in context.LevelOne on e2.Id equals e1.OneToOne_Optional_FK.Id + join e3 in context.LevelThree on e2.Id equals e3.OneToOne_Optional_FK_Inverse.Id + select new { Id2 = e2.Id, Id1 = e1.Id, Id3 = e3.Id }; + + var result = query.ToList(); + + var expected = (from e2 in levelTwos + join e1 in levelOnes on e2.Id equals e1.OneToOne_Optional_FK?.Id + join e3 in levelThrees on e2.Id equals e3.OneToOne_Optional_FK_Inverse?.Id + select new { Id2 = e2.Id, Id1 = e1.Id, Id3 = e3.Id }).ToList(); + + Assert.Equal(expected.Count, result.Count); + foreach (var resultItem in result) + { + Assert.True(expected.Contains(resultItem)); + } + } + } + [ConditionalFact] public virtual void Join_navigation_translated_to_subquery_non_key_join() { diff --git a/test/Microsoft.EntityFrameworkCore.FunctionalTests/GearsOfWarQueryTestBase.cs b/test/Microsoft.EntityFrameworkCore.FunctionalTests/GearsOfWarQueryTestBase.cs index 6d49abc887a..c5e412cb292 100644 --- a/test/Microsoft.EntityFrameworkCore.FunctionalTests/GearsOfWarQueryTestBase.cs +++ b/test/Microsoft.EntityFrameworkCore.FunctionalTests/GearsOfWarQueryTestBase.cs @@ -502,6 +502,30 @@ public virtual void Where_nullable_enum_with_nullable_parameter() } } + [ConditionalFact] + public virtual void Where_count_subquery_without_collision() + { + using (var context = CreateContext()) + { + var query = context.Gears.Where(w => w.Weapons.Count == 2); + var result = query.ToList(); + + Assert.Equal(4, result.Count); + } + } + + [ConditionalFact] + public virtual void Where_any_subquery_without_collision() + { + using (var context = CreateContext()) + { + var query = context.Gears.Where(w => w.Weapons.Any()); + var result = query.ToList(); + + Assert.Equal(5, result.Count); + } + } + [ConditionalFact] public virtual void Select_inverted_boolean() { @@ -548,7 +572,7 @@ public virtual void Select_ternary_operation_with_boolean() using (var context = CreateContext()) { var weapons = context.Weapons - .Select(w => new { w.Id, Num = w.IsAutomatic ? 1 : 0}) + .Select(w => new { w.Id, Num = w.IsAutomatic ? 1 : 0 }) .ToList(); Assert.Equal(3, weapons.Count(w => w.Num == 1)); @@ -575,7 +599,7 @@ public virtual void Select_ternary_operation_with_has_value_not_null() { var cartridgeWeapons = context.Weapons .Where(w => w.AmmunitionType.HasValue && w.AmmunitionType == AmmunitionType.Cartridge) - .Select(w => new { w.Id, IsCartidge = w.AmmunitionType.HasValue && w.AmmunitionType.Value == AmmunitionType.Cartridge ? "Yes" : "No"}) + .Select(w => new { w.Id, IsCartidge = w.AmmunitionType.HasValue && w.AmmunitionType.Value == AmmunitionType.Cartridge ? "Yes" : "No" }) .ToList(); Assert.All(cartridgeWeapons, @@ -592,7 +616,7 @@ public virtual void Select_ternary_operation_multiple_conditions() .Select(w => new { w.Id, IsCartidge = w.AmmunitionType == AmmunitionType.Shell && w.SynergyWithId == 1 ? "Yes" : "No" }) .ToList(); - Assert.Equal(9 , cartridgeWeapons.Count(w => w.IsCartidge == "No")); + Assert.Equal(9, cartridgeWeapons.Count(w => w.IsCartidge == "No")); } } @@ -615,7 +639,7 @@ public virtual void Select_multiple_conditions() using (var context = CreateContext()) { var cartridgeWeapons = context.Weapons - .Select(w => new { w.Id, IsCartidge = !w.IsAutomatic && w.SynergyWithId == 1}) + .Select(w => new { w.Id, IsCartidge = !w.IsAutomatic && w.SynergyWithId == 1 }) .ToList(); Assert.Equal(9, cartridgeWeapons.Count(w => !w.IsCartidge)); @@ -642,8 +666,8 @@ public virtual void Select_Where_Navigation() { var cogTags = (from ct in context.Set<CogTag>() - where ct.Gear.Nickname == "Marcus" - select ct).ToList(); + where ct.Gear.Nickname == "Marcus" + select ct).ToList(); Assert.Equal(1, cogTags.Count); } @@ -656,9 +680,9 @@ public virtual void Select_Where_Navigation_Scalar_Equals_Navigation_Scalar() { var cogTags = (from ct1 in context.Set<CogTag>() - from ct2 in context.Set<CogTag>() - where ct1.Gear.Nickname == ct2.Gear.Nickname - select new { ct1, ct2 }).ToList(); + from ct2 in context.Set<CogTag>() + where ct1.Gear.Nickname == ct2.Gear.Nickname + select new { ct1, ct2 }).ToList(); Assert.Equal(5, cogTags.Count); } @@ -671,9 +695,9 @@ public virtual void Select_Where_Navigation_Scalar_Equals_Navigation_Scalar_Proj { var cogTags = (from ct1 in context.Set<CogTag>() - from ct2 in context.Set<CogTag>() - where ct1.Gear.Nickname == ct2.Gear.Nickname - select new { ct1.Id, C2 = ct2.Id }).ToList(); + from ct2 in context.Set<CogTag>() + where ct1.Gear.Nickname == ct2.Gear.Nickname + select new { ct1.Id, C2 = ct2.Id }).ToList(); Assert.Equal(5, cogTags.Count); } @@ -686,8 +710,8 @@ public virtual void Select_Where_Navigation_Client() { var cogTags = (from o in context.Set<CogTag>() - where o.Gear.IsMarcus - select o).ToList(); + where o.Gear.IsMarcus + select o).ToList(); Assert.Equal(1, cogTags.Count); } @@ -700,8 +724,8 @@ public virtual void Select_Where_Navigation_Null() { var cogTags = (from ct in context.Set<CogTag>() - where ct.Gear == null - select ct).ToList(); + where ct.Gear == null + select ct).ToList(); Assert.Equal(1, cogTags.Count); } @@ -714,8 +738,8 @@ public virtual void Select_Where_Navigation_Null_Reverse() { var cogTags = (from ct in context.Set<CogTag>() - where null == ct.Gear - select ct).ToList(); + where null == ct.Gear + select ct).ToList(); Assert.Equal(1, cogTags.Count); } @@ -728,9 +752,9 @@ public virtual void Select_Where_Navigation_Equals_Navigation() { var cogTags = (from ct1 in context.Set<CogTag>() - from ct2 in context.Set<CogTag>() - where ct1.Gear == ct2.Gear - select new { ct1, ct2 }).ToList(); + from ct2 in context.Set<CogTag>() + where ct1.Gear == ct2.Gear + select new { ct1, ct2 }).ToList(); Assert.Equal(6, cogTags.Count); } @@ -743,9 +767,9 @@ public virtual void Singleton_Navigation_With_Member_Access() { var cogTags = (from ct in context.Set<CogTag>() - where ct.Gear.Nickname == "Marcus" - where ct.Gear.CityOrBirthName != "Ephyra" - select new { B = ct.Gear.CityOrBirthName }).ToList(); + where ct.Gear.Nickname == "Marcus" + where ct.Gear.CityOrBirthName != "Ephyra" + select new { B = ct.Gear.CityOrBirthName }).ToList(); Assert.Equal(1, cogTags.Count); Assert.True(cogTags.All(o => o.B != null)); @@ -759,9 +783,9 @@ public virtual void Select_Singleton_Navigation_With_Member_Access() { var cogTags = (from ct in context.Set<CogTag>() - where ct.Gear.Nickname == "Marcus" - where ct.Gear.CityOrBirthName != "Ephyra" - select new { A = ct.Gear, B = ct.Gear.CityOrBirthName }).ToList(); + where ct.Gear.Nickname == "Marcus" + where ct.Gear.CityOrBirthName != "Ephyra" + select new { A = ct.Gear, B = ct.Gear.CityOrBirthName }).ToList(); Assert.Equal(1, cogTags.Count); Assert.True(cogTags.All(o => o.A != null && o.B != null)); @@ -775,11 +799,11 @@ public virtual void GroupJoin_Composite_Key() { var gears = (from ct in context.Set<CogTag>() - join g in context.Set<Gear>() - on new { N = ct.GearNickName, S = ct.GearSquadId } - equals new { N = g.Nickname, S = (int?)g.SquadId } into gs - from g in gs - select g).ToList(); + join g in context.Set<Gear>() + on new { N = ct.GearNickName, S = ct.GearSquadId } + equals new { N = g.Nickname, S = (int?)g.SquadId } into gs + from g in gs + select g).ToList(); Assert.Equal(5, gears.Count); } @@ -824,7 +848,7 @@ public virtual void Collection_with_inheritance_and_join_include_joined() using (var context = CreateContext()) { var query = (from t in context.Tags - join g in context.Gears.OfType<Officer>() on new { id1 = t.GearSquadId, id2 = t.GearNickName } + join g in context.Gears.OfType<Officer>() on new { id1 = t.GearSquadId, id2 = t.GearNickName } equals new { id1 = (int?)g.SquadId, id2 = g.Nickname } select g).Include(g => g.Tag); @@ -840,7 +864,7 @@ public virtual void Collection_with_inheritance_and_join_include_source() using (var context = CreateContext()) { var query = (from g in context.Gears.OfType<Officer>() - join t in context.Tags on new { id1 = (int?)g.SquadId, id2 = g.Nickname } + join t in context.Tags on new { id1 = (int?)g.SquadId, id2 = g.Nickname } equals new { id1 = t.GearSquadId, id2 = t.GearNickName } select g).Include(g => g.Tag); diff --git a/test/Microsoft.EntityFrameworkCore.FunctionalTests/IncludeTestBase.cs b/test/Microsoft.EntityFrameworkCore.FunctionalTests/IncludeTestBase.cs index 44437e3ba20..5de7cf04458 100644 --- a/test/Microsoft.EntityFrameworkCore.FunctionalTests/IncludeTestBase.cs +++ b/test/Microsoft.EntityFrameworkCore.FunctionalTests/IncludeTestBase.cs @@ -1157,7 +1157,7 @@ public virtual void Include_with_complex_projection() } } - [Fact] + [Fact] public virtual void Include_with_take() { using (var context = CreateContext()) diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/ComplexNavigationsQuerySqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/ComplexNavigationsQuerySqlServerTest.cs index b68c78479ce..1ab9bf2728f 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/ComplexNavigationsQuerySqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/ComplexNavigationsQuerySqlServerTest.cs @@ -30,20 +30,20 @@ FROM [Level2] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] -) AS [e] ON [l].[OneToMany_Optional_InverseId] = [e].[Id] -ORDER BY [e].[Id], [l].[Id] +) AS [e0] ON [l].[OneToMany_Optional_InverseId] = [e0].[Id] +ORDER BY [e0].[Id], [l].[Id] -SELECT [l].[Id], [l].[Level2_Optional_Id], [l].[Level2_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId] -FROM [Level3] AS [l] +SELECT [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_InverseId], [l0].[OneToMany_Optional_Self_InverseId], [l0].[OneToMany_Required_InverseId], [l0].[OneToMany_Required_Self_InverseId], [l0].[OneToOne_Optional_PK_InverseId], [l0].[OneToOne_Optional_SelfId] +FROM [Level3] AS [l0] INNER JOIN ( - SELECT DISTINCT [e].[Id], [l].[Id] AS [Id0] + SELECT DISTINCT [e0].[Id], [l].[Id] AS [Id0] FROM [Level2] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] - ) AS [e] ON [l].[OneToMany_Optional_InverseId] = [e].[Id] -) AS [l0] ON [l].[OneToMany_Optional_InverseId] = [l0].[Id0] -ORDER BY [l0].[Id], [l0].[Id0]", + ) AS [e0] ON [l].[OneToMany_Optional_InverseId] = [e0].[Id] +) AS [l1] ON [l0].[OneToMany_Optional_InverseId] = [l1].[Id0] +ORDER BY [l1].[Id], [l1].[Id0]", Sql); } @@ -61,38 +61,38 @@ FROM [Level2] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] -) AS [e] ON [l].[OneToMany_Optional_InverseId] = [e].[Id] -ORDER BY [e].[Id], [l].[Id] +) AS [e0] ON [l].[OneToMany_Optional_InverseId] = [e0].[Id] +ORDER BY [e0].[Id], [l].[Id] -SELECT [l].[Id], [l].[Level2_Optional_Id], [l].[Level2_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId], [l1].[Id], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_InverseId], [l1].[OneToMany_Optional_Self_InverseId], [l1].[OneToMany_Required_InverseId], [l1].[OneToMany_Required_Self_InverseId], [l1].[OneToOne_Optional_PK_InverseId], [l1].[OneToOne_Optional_SelfId] -FROM [Level3] AS [l] +SELECT [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_InverseId], [l0].[OneToMany_Optional_Self_InverseId], [l0].[OneToMany_Required_InverseId], [l0].[OneToMany_Required_Self_InverseId], [l0].[OneToOne_Optional_PK_InverseId], [l0].[OneToOne_Optional_SelfId], [l2].[Id], [l2].[Level1_Optional_Id], [l2].[Level1_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_InverseId], [l2].[OneToMany_Optional_Self_InverseId], [l2].[OneToMany_Required_InverseId], [l2].[OneToMany_Required_Self_InverseId], [l2].[OneToOne_Optional_PK_InverseId], [l2].[OneToOne_Optional_SelfId] +FROM [Level3] AS [l0] INNER JOIN ( - SELECT DISTINCT [e].[Id], [l].[Id] AS [Id0] + SELECT DISTINCT [e0].[Id], [l].[Id] AS [Id0] FROM [Level2] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] - ) AS [e] ON [l].[OneToMany_Optional_InverseId] = [e].[Id] -) AS [l0] ON [l].[OneToMany_Optional_InverseId] = [l0].[Id0] -INNER JOIN [Level2] AS [l1] ON [l].[OneToMany_Required_InverseId] = [l1].[Id] -ORDER BY [l0].[Id], [l0].[Id0], [l1].[Id] + ) AS [e0] ON [l].[OneToMany_Optional_InverseId] = [e0].[Id] +) AS [l1] ON [l0].[OneToMany_Optional_InverseId] = [l1].[Id0] +INNER JOIN [Level2] AS [l2] ON [l0].[OneToMany_Required_InverseId] = [l2].[Id] +ORDER BY [l1].[Id], [l1].[Id0], [l2].[Id] -SELECT [l].[Id], [l].[Level2_Optional_Id], [l].[Level2_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId] -FROM [Level3] AS [l] +SELECT [l3].[Id], [l3].[Level2_Optional_Id], [l3].[Level2_Required_Id], [l3].[Name], [l3].[OneToMany_Optional_InverseId], [l3].[OneToMany_Optional_Self_InverseId], [l3].[OneToMany_Required_InverseId], [l3].[OneToMany_Required_Self_InverseId], [l3].[OneToOne_Optional_PK_InverseId], [l3].[OneToOne_Optional_SelfId] +FROM [Level3] AS [l3] INNER JOIN ( - SELECT DISTINCT [l0].[Id], [l0].[Id0], [l1].[Id] AS [Id1] - FROM [Level3] AS [l] + SELECT DISTINCT [l1].[Id], [l1].[Id0], [l2].[Id] AS [Id1] + FROM [Level3] AS [l0] INNER JOIN ( - SELECT DISTINCT [e].[Id], [l].[Id] AS [Id0] + SELECT DISTINCT [e0].[Id], [l].[Id] AS [Id0] FROM [Level2] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] - ) AS [e] ON [l].[OneToMany_Optional_InverseId] = [e].[Id] - ) AS [l0] ON [l].[OneToMany_Optional_InverseId] = [l0].[Id0] - INNER JOIN [Level2] AS [l1] ON [l].[OneToMany_Required_InverseId] = [l1].[Id] -) AS [l1] ON [l].[OneToMany_Optional_InverseId] = [l1].[Id1] -ORDER BY [l1].[Id], [l1].[Id0], [l1].[Id1]", + ) AS [e0] ON [l].[OneToMany_Optional_InverseId] = [e0].[Id] + ) AS [l1] ON [l0].[OneToMany_Optional_InverseId] = [l1].[Id0] + INNER JOIN [Level2] AS [l2] ON [l0].[OneToMany_Required_InverseId] = [l2].[Id] +) AS [l20] ON [l3].[OneToMany_Optional_InverseId] = [l20].[Id1] +ORDER BY [l20].[Id], [l20].[Id0], [l20].[Id1]", Sql); } @@ -101,32 +101,32 @@ public override void Multi_level_include_with_short_circuiting() base.Multi_level_include_with_short_circuiting(); Assert.Equal( - @"SELECT [x].[Name], [x].[LabelDefaultText], [x].[PlaceholderDefaultText], [c].[DefaultText], [c0].[DefaultText] + @"SELECT [x].[Name], [x].[LabelDefaultText], [x].[PlaceholderDefaultText], [c].[DefaultText], [c3].[DefaultText] FROM [ComplexNavigationField] AS [x] LEFT JOIN [ComplexNavigationString] AS [c] ON [x].[LabelDefaultText] = [c].[DefaultText] -LEFT JOIN [ComplexNavigationString] AS [c0] ON [x].[PlaceholderDefaultText] = [c0].[DefaultText] -ORDER BY [c].[DefaultText], [c0].[DefaultText] +LEFT JOIN [ComplexNavigationString] AS [c3] ON [x].[PlaceholderDefaultText] = [c3].[DefaultText] +ORDER BY [c].[DefaultText], [c3].[DefaultText] -SELECT [c].[Text], [c].[ComplexNavigationStringDefaultText], [c].[LanguageName], [c1].[Name], [c1].[CultureString] -FROM [ComplexNavigationGlobalization] AS [c] +SELECT [c0].[Text], [c0].[ComplexNavigationStringDefaultText], [c0].[LanguageName], [c2].[Name], [c2].[CultureString] +FROM [ComplexNavigationGlobalization] AS [c0] INNER JOIN ( SELECT DISTINCT [c].[DefaultText] FROM [ComplexNavigationField] AS [x] LEFT JOIN [ComplexNavigationString] AS [c] ON [x].[LabelDefaultText] = [c].[DefaultText] -) AS [c0] ON [c].[ComplexNavigationStringDefaultText] = [c0].[DefaultText] -LEFT JOIN [ComplexNavigationLanguage] AS [c1] ON [c].[LanguageName] = [c1].[Name] -ORDER BY [c0].[DefaultText] +) AS [c1] ON [c0].[ComplexNavigationStringDefaultText] = [c1].[DefaultText] +LEFT JOIN [ComplexNavigationLanguage] AS [c2] ON [c0].[LanguageName] = [c2].[Name] +ORDER BY [c1].[DefaultText] -SELECT [c].[Text], [c].[ComplexNavigationStringDefaultText], [c].[LanguageName], [c1].[Name], [c1].[CultureString] -FROM [ComplexNavigationGlobalization] AS [c] +SELECT [c4].[Text], [c4].[ComplexNavigationStringDefaultText], [c4].[LanguageName], [c5].[Name], [c5].[CultureString] +FROM [ComplexNavigationGlobalization] AS [c4] INNER JOIN ( - SELECT DISTINCT [c].[DefaultText], [c0].[DefaultText] AS [DefaultText0] + SELECT DISTINCT [c].[DefaultText], [c3].[DefaultText] AS [DefaultText0] FROM [ComplexNavigationField] AS [x] LEFT JOIN [ComplexNavigationString] AS [c] ON [x].[LabelDefaultText] = [c].[DefaultText] - LEFT JOIN [ComplexNavigationString] AS [c0] ON [x].[PlaceholderDefaultText] = [c0].[DefaultText] -) AS [c0] ON [c].[ComplexNavigationStringDefaultText] = [c0].[DefaultText0] -LEFT JOIN [ComplexNavigationLanguage] AS [c1] ON [c].[LanguageName] = [c1].[Name] -ORDER BY [c0].[DefaultText], [c0].[DefaultText0]", + LEFT JOIN [ComplexNavigationString] AS [c3] ON [x].[PlaceholderDefaultText] = [c3].[DefaultText] +) AS [c30] ON [c4].[ComplexNavigationStringDefaultText] = [c30].[DefaultText0] +LEFT JOIN [ComplexNavigationLanguage] AS [c5] ON [c4].[LanguageName] = [c5].[Name] +ORDER BY [c30].[DefaultText], [c30].[DefaultText0]", Sql); } @@ -207,6 +207,26 @@ FROM [Level2] AS [subQuery0] Sql); } + public override void Join_navigations_in_inner_selector_translated_to_multiple_subquery_without_collision() + { + base.Join_navigations_in_inner_selector_translated_to_multiple_subquery_without_collision(); + + Assert.Equal( + @"SELECT [e2].[Id], [e1].[Id], [e3].[Id] +FROM [Level2] AS [e2] +INNER JOIN [Level1] AS [e1] ON [e2].[Id] = ( + SELECT TOP(1) [subQuery0].[Id] + FROM [Level2] AS [subQuery0] + WHERE [subQuery0].[Level1_Optional_Id] = [e1].[Id] +) +INNER JOIN [Level3] AS [e3] ON [e2].[Id] = ( + SELECT TOP(1) [subQuery2].[Id] + FROM [Level2] AS [subQuery2] + WHERE [subQuery2].[Id] = [e3].[Level2_Optional_Id] +)", + Sql); + } + public override void Join_navigation_translated_to_subquery_non_key_join() { base.Join_navigation_translated_to_subquery_non_key_join(); @@ -225,7 +245,7 @@ FROM [Level2] AS [subQuery0] public override void Join_navigation_translated_to_subquery_self_ref() { base.Join_navigation_translated_to_subquery_self_ref(); - + Assert.Equal( @"SELECT [e1].[Id], [e2].[Id] FROM [Level1] AS [e1] @@ -245,9 +265,9 @@ public override void Join_navigation_translated_to_subquery_nested() @"SELECT [e3].[Id], [e1].[Id] FROM [Level3] AS [e3] INNER JOIN [Level1] AS [e1] ON [e3].[Id] = ( - SELECT TOP(1) [subQuery0.OneToOne_Optional_FK].[Id] + SELECT TOP(1) [subQuery.OneToOne_Optional_FK0].[Id] FROM [Level2] AS [subQuery0] - INNER JOIN [Level3] AS [subQuery0.OneToOne_Optional_FK] ON [subQuery0].[Id] = [subQuery0.OneToOne_Optional_FK].[Level2_Optional_Id] + INNER JOIN [Level3] AS [subQuery.OneToOne_Optional_FK0] ON [subQuery0].[Id] = [subQuery.OneToOne_Optional_FK0].[Level2_Optional_Id] WHERE [subQuery0].[Level1_Required_Id] = [e1].[Id] )", Sql); @@ -261,10 +281,10 @@ public override void Join_navigation_translated_to_subquery_deeply_nested_non_ke @"SELECT [e4].[Id], [e4].[Name], [e1].[Id], [e1].[Name] FROM [Level4] AS [e4] INNER JOIN [Level1] AS [e1] ON [e4].[Name] = ( - SELECT TOP(1) [subQuery0.OneToOne_Optional_FK.OneToOne_Required_PK].[Name] + SELECT TOP(1) [subQuery.OneToOne_Optional_FK.OneToOne_Required_PK0].[Name] FROM [Level2] AS [subQuery0] - INNER JOIN [Level3] AS [subQuery0.OneToOne_Optional_FK] ON [subQuery0].[Id] = [subQuery0.OneToOne_Optional_FK].[Level2_Optional_Id] - INNER JOIN [Level4] AS [subQuery0.OneToOne_Optional_FK.OneToOne_Required_PK] ON [subQuery0.OneToOne_Optional_FK].[Id] = [subQuery0.OneToOne_Optional_FK.OneToOne_Required_PK].[Id] + INNER JOIN [Level3] AS [subQuery.OneToOne_Optional_FK0] ON [subQuery0].[Id] = [subQuery.OneToOne_Optional_FK0].[Level2_Optional_Id] + INNER JOIN [Level4] AS [subQuery.OneToOne_Optional_FK.OneToOne_Required_PK0] ON [subQuery.OneToOne_Optional_FK0].[Id] = [subQuery.OneToOne_Optional_FK.OneToOne_Required_PK0].[Id] WHERE [subQuery0].[Level1_Required_Id] = [e1].[Id] )", Sql); @@ -275,28 +295,28 @@ public override void Multiple_complex_includes() base.Multiple_complex_includes(); Assert.Equal( - @"SELECT [e].[Id], [e].[Name], [e].[OneToMany_Optional_Self_InverseId], [e].[OneToMany_Required_Self_InverseId], [e].[OneToOne_Optional_SelfId], [l].[Id], [l].[Level1_Optional_Id], [l].[Level1_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId] + @"SELECT [e].[Id], [e].[Name], [e].[OneToMany_Optional_Self_InverseId], [e].[OneToMany_Required_Self_InverseId], [e].[OneToOne_Optional_SelfId], [l1].[Id], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_InverseId], [l1].[OneToMany_Optional_Self_InverseId], [l1].[OneToMany_Required_InverseId], [l1].[OneToMany_Required_Self_InverseId], [l1].[OneToOne_Optional_PK_InverseId], [l1].[OneToOne_Optional_SelfId] FROM [Level1] AS [e] -LEFT JOIN [Level2] AS [l] ON [l].[Level1_Optional_Id] = [e].[Id] -ORDER BY [e].[Id], [l].[Id] +LEFT JOIN [Level2] AS [l1] ON [l1].[Level1_Optional_Id] = [e].[Id] +ORDER BY [e].[Id], [l1].[Id] SELECT [l].[Id], [l].[Level1_Optional_Id], [l].[Level1_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId], [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_InverseId], [l0].[OneToMany_Optional_Self_InverseId], [l0].[OneToMany_Required_InverseId], [l0].[OneToMany_Required_Self_InverseId], [l0].[OneToOne_Optional_PK_InverseId], [l0].[OneToOne_Optional_SelfId] FROM [Level2] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] -) AS [e] ON [l].[OneToMany_Optional_InverseId] = [e].[Id] +) AS [e0] ON [l].[OneToMany_Optional_InverseId] = [e0].[Id] LEFT JOIN [Level3] AS [l0] ON [l0].[Level2_Optional_Id] = [l].[Id] -ORDER BY [e].[Id] +ORDER BY [e0].[Id] -SELECT [l].[Id], [l].[Level2_Optional_Id], [l].[Level2_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId] -FROM [Level3] AS [l] +SELECT [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_InverseId], [l2].[OneToMany_Optional_Self_InverseId], [l2].[OneToMany_Required_InverseId], [l2].[OneToMany_Required_Self_InverseId], [l2].[OneToOne_Optional_PK_InverseId], [l2].[OneToOne_Optional_SelfId] +FROM [Level3] AS [l2] INNER JOIN ( - SELECT DISTINCT [e].[Id], [l].[Id] AS [Id0] + SELECT DISTINCT [e].[Id], [l1].[Id] AS [Id0] FROM [Level1] AS [e] - LEFT JOIN [Level2] AS [l] ON [l].[Level1_Optional_Id] = [e].[Id] -) AS [l0] ON [l].[OneToMany_Optional_InverseId] = [l0].[Id0] -ORDER BY [l0].[Id], [l0].[Id0]", + LEFT JOIN [Level2] AS [l1] ON [l1].[Level1_Optional_Id] = [e].[Id] +) AS [l10] ON [l2].[OneToMany_Optional_InverseId] = [l10].[Id0] +ORDER BY [l10].[Id], [l10].[Id0]", Sql); } @@ -305,28 +325,28 @@ public override void Multiple_complex_includes_self_ref() base.Multiple_complex_includes_self_ref(); Assert.Equal( - @"SELECT [e].[Id], [e].[Name], [e].[OneToMany_Optional_Self_InverseId], [e].[OneToMany_Required_Self_InverseId], [e].[OneToOne_Optional_SelfId], [l].[Id], [l].[Name], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_SelfId] + @"SELECT [e].[Id], [e].[Name], [e].[OneToMany_Optional_Self_InverseId], [e].[OneToMany_Required_Self_InverseId], [e].[OneToOne_Optional_SelfId], [l1].[Id], [l1].[Name], [l1].[OneToMany_Optional_Self_InverseId], [l1].[OneToMany_Required_Self_InverseId], [l1].[OneToOne_Optional_SelfId] FROM [Level1] AS [e] -LEFT JOIN [Level1] AS [l] ON [e].[OneToOne_Optional_SelfId] = [l].[Id] -ORDER BY [e].[Id], [l].[Id] +LEFT JOIN [Level1] AS [l1] ON [e].[OneToOne_Optional_SelfId] = [l1].[Id] +ORDER BY [e].[Id], [l1].[Id] -SELECT [l].[Id], [l].[Name], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_SelfId] -FROM [Level1] AS [l] +SELECT [l2].[Id], [l2].[Name], [l2].[OneToMany_Optional_Self_InverseId], [l2].[OneToMany_Required_Self_InverseId], [l2].[OneToOne_Optional_SelfId] +FROM [Level1] AS [l2] INNER JOIN ( - SELECT DISTINCT [e].[Id], [l].[Id] AS [Id0] + SELECT DISTINCT [e].[Id], [l1].[Id] AS [Id0] FROM [Level1] AS [e] - LEFT JOIN [Level1] AS [l] ON [e].[OneToOne_Optional_SelfId] = [l].[Id] -) AS [l0] ON [l].[OneToMany_Optional_Self_InverseId] = [l0].[Id0] -ORDER BY [l0].[Id], [l0].[Id0] + LEFT JOIN [Level1] AS [l1] ON [e].[OneToOne_Optional_SelfId] = [l1].[Id] +) AS [l10] ON [l2].[OneToMany_Optional_Self_InverseId] = [l10].[Id0] +ORDER BY [l10].[Id], [l10].[Id0] SELECT [l].[Id], [l].[Name], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_SelfId], [l0].[Id], [l0].[Name], [l0].[OneToMany_Optional_Self_InverseId], [l0].[OneToMany_Required_Self_InverseId], [l0].[OneToOne_Optional_SelfId] FROM [Level1] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] -) AS [e] ON [l].[OneToMany_Optional_Self_InverseId] = [e].[Id] +) AS [e0] ON [l].[OneToMany_Optional_Self_InverseId] = [e0].[Id] LEFT JOIN [Level1] AS [l0] ON [l].[OneToOne_Optional_SelfId] = [l0].[Id] -ORDER BY [e].[Id]", +ORDER BY [e0].[Id]", Sql); } @@ -335,28 +355,28 @@ public override void Multiple_complex_include_select() base.Multiple_complex_include_select(); Assert.Equal( - @"SELECT [e].[Id], [e].[Name], [e].[OneToMany_Optional_Self_InverseId], [e].[OneToMany_Required_Self_InverseId], [e].[OneToOne_Optional_SelfId], [l].[Id], [l].[Level1_Optional_Id], [l].[Level1_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId] + @"SELECT [e].[Id], [e].[Name], [e].[OneToMany_Optional_Self_InverseId], [e].[OneToMany_Required_Self_InverseId], [e].[OneToOne_Optional_SelfId], [l1].[Id], [l1].[Level1_Optional_Id], [l1].[Level1_Required_Id], [l1].[Name], [l1].[OneToMany_Optional_InverseId], [l1].[OneToMany_Optional_Self_InverseId], [l1].[OneToMany_Required_InverseId], [l1].[OneToMany_Required_Self_InverseId], [l1].[OneToOne_Optional_PK_InverseId], [l1].[OneToOne_Optional_SelfId] FROM [Level1] AS [e] -LEFT JOIN [Level2] AS [l] ON [l].[Level1_Optional_Id] = [e].[Id] -ORDER BY [e].[Id], [l].[Id] +LEFT JOIN [Level2] AS [l1] ON [l1].[Level1_Optional_Id] = [e].[Id] +ORDER BY [e].[Id], [l1].[Id] SELECT [l].[Id], [l].[Level1_Optional_Id], [l].[Level1_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId], [l0].[Id], [l0].[Level2_Optional_Id], [l0].[Level2_Required_Id], [l0].[Name], [l0].[OneToMany_Optional_InverseId], [l0].[OneToMany_Optional_Self_InverseId], [l0].[OneToMany_Required_InverseId], [l0].[OneToMany_Required_Self_InverseId], [l0].[OneToOne_Optional_PK_InverseId], [l0].[OneToOne_Optional_SelfId] FROM [Level2] AS [l] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [Level1] AS [e] -) AS [e] ON [l].[OneToMany_Optional_InverseId] = [e].[Id] +) AS [e0] ON [l].[OneToMany_Optional_InverseId] = [e0].[Id] LEFT JOIN [Level3] AS [l0] ON [l0].[Level2_Optional_Id] = [l].[Id] -ORDER BY [e].[Id] +ORDER BY [e0].[Id] -SELECT [l].[Id], [l].[Level2_Optional_Id], [l].[Level2_Required_Id], [l].[Name], [l].[OneToMany_Optional_InverseId], [l].[OneToMany_Optional_Self_InverseId], [l].[OneToMany_Required_InverseId], [l].[OneToMany_Required_Self_InverseId], [l].[OneToOne_Optional_PK_InverseId], [l].[OneToOne_Optional_SelfId] -FROM [Level3] AS [l] +SELECT [l2].[Id], [l2].[Level2_Optional_Id], [l2].[Level2_Required_Id], [l2].[Name], [l2].[OneToMany_Optional_InverseId], [l2].[OneToMany_Optional_Self_InverseId], [l2].[OneToMany_Required_InverseId], [l2].[OneToMany_Required_Self_InverseId], [l2].[OneToOne_Optional_PK_InverseId], [l2].[OneToOne_Optional_SelfId] +FROM [Level3] AS [l2] INNER JOIN ( - SELECT DISTINCT [e].[Id], [l].[Id] AS [Id0] + SELECT DISTINCT [e].[Id], [l1].[Id] AS [Id0] FROM [Level1] AS [e] - LEFT JOIN [Level2] AS [l] ON [l].[Level1_Optional_Id] = [e].[Id] -) AS [l0] ON [l].[OneToMany_Optional_InverseId] = [l0].[Id0] -ORDER BY [l0].[Id], [l0].[Id0]", + LEFT JOIN [Level2] AS [l1] ON [l1].[Level1_Optional_Id] = [e].[Id] +) AS [l10] ON [l2].[OneToMany_Optional_InverseId] = [l10].[Id0] +ORDER BY [l10].[Id], [l10].[Id0]", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/FromSqlQuerySqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/FromSqlQuerySqlServerTest.cs index 5befacc8205..81921b18903 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/FromSqlQuerySqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/FromSqlQuerySqlServerTest.cs @@ -249,8 +249,8 @@ SELECT DISTINCT [c].[CustomerID] FROM ( SELECT * FROM ""Customers"" ) AS [c] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -274,8 +274,8 @@ SELECT DISTINCT [c].[CustomerID] SELECT * FROM ""Customers"" ) AS [c] WHERE [c].[City] = 'London' -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/GearsOfWarQuerySqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/GearsOfWarQuerySqlServerTest.cs index c7c6ce6cb54..e8abe0cb38b 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/GearsOfWarQuerySqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/GearsOfWarQuerySqlServerTest.cs @@ -33,8 +33,8 @@ SELECT [g].* FROM [Gear] AS [g] WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') ) AS [g] ON ([t].[GearNickName] = [g].[Nickname]) AND ([t].[GearSquadId] = [g].[SquadId]) -) AS [g] ON [w].[OwnerFullName] = [g].[FullName] -ORDER BY [g].[FullName]", +) AS [g0] ON [w].[OwnerFullName] = [g0].[FullName] +ORDER BY [g0].[FullName]", Sql); } @@ -62,8 +62,8 @@ SELECT [g].* FROM [Gear] AS [g] WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') ) AS [g] ON ([t].[GearNickName] = [g].[Nickname]) AND ([t].[GearSquadId] = [g].[SquadId]) -) AS [g] ON [w].[OwnerFullName] = [g].[FullName] -ORDER BY [g].[FullName]", +) AS [g0] ON [w].[OwnerFullName] = [g0].[FullName] +ORDER BY [g0].[FullName]", Sql); } @@ -82,8 +82,8 @@ FROM [Gear] AS [g] LEFT JOIN [Squad] AS [s] ON [g].[SquadId] = [s].[Id] ORDER BY [s].[Id] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gear] AS [g] +SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] +FROM [Gear] AS [g0] INNER JOIN ( SELECT DISTINCT [s].[Id] FROM [CogTag] AS [t] @@ -93,9 +93,10 @@ FROM [Gear] AS [g] WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') ) AS [g] ON ([t].[GearNickName] = [g].[Nickname]) AND ([t].[GearSquadId] = [g].[SquadId]) LEFT JOIN [Squad] AS [s] ON [g].[SquadId] = [s].[Id] -) AS [s] ON [g].[SquadId] = [s].[Id] -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [s].[Id]", Sql); +) AS [s0] ON [g0].[SquadId] = [s0].[Id] +WHERE ([g0].[Discriminator] = 'Officer') OR ([g0].[Discriminator] = 'Gear') +ORDER BY [s0].[Id]", + Sql); } public override void Include_multiple_one_to_one_optional_and_one_to_one_required() @@ -110,7 +111,8 @@ SELECT [g].* FROM [Gear] AS [g] WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') ) AS [g] ON ([t].[GearNickName] = [g].[Nickname]) AND ([t].[GearSquadId] = [g].[SquadId]) -LEFT JOIN [Squad] AS [s] ON [g].[SquadId] = [s].[Id]", Sql); +LEFT JOIN [Squad] AS [s] ON [g].[SquadId] = [s].[Id]", + Sql); } public override void Include_multiple_circular() @@ -124,16 +126,16 @@ FROM [Gear] AS [g] WHERE [g].[Discriminator] IN ('Officer', 'Gear') ORDER BY [c].[Name] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gear] AS [g] +SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] +FROM [Gear] AS [g0] INNER JOIN ( SELECT DISTINCT [c].[Name] FROM [Gear] AS [g] INNER JOIN [City] AS [c] ON [g].[CityOrBirthName] = [c].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') -) AS [c] ON [g].[AssignedCityName] = [c].[Name] -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [c].[Name]", +) AS [c0] ON [g0].[AssignedCityName] = [c0].[Name] +WHERE ([g0].[Discriminator] = 'Officer') OR ([g0].[Discriminator] = 'Gear') +ORDER BY [c0].[Name]", Sql); } @@ -148,16 +150,16 @@ FROM [Gear] AS [g] WHERE [g].[Discriminator] IN ('Officer', 'Gear') AND ([g].[Nickname] = 'Marcus') ORDER BY [c].[Name] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gear] AS [g] +SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] +FROM [Gear] AS [g0] INNER JOIN ( SELECT DISTINCT [c].[Name] FROM [Gear] AS [g] INNER JOIN [City] AS [c] ON [g].[CityOrBirthName] = [c].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') AND ([g].[Nickname] = 'Marcus') -) AS [c] ON [g].[AssignedCityName] = [c].[Name] -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [c].[Name]", +) AS [c0] ON [g0].[AssignedCityName] = [c0].[Name] +WHERE ([g0].[Discriminator] = 'Officer') OR ([g0].[Discriminator] = 'Gear') +ORDER BY [c0].[Name]", Sql); } @@ -177,8 +179,8 @@ INNER JOIN ( SELECT DISTINCT [g].[FullName] FROM [Gear] AS [g] WHERE [g].[Discriminator] IN ('Officer', 'Gear') AND ([g].[Nickname] = 'Marcus') -) AS [g] ON [w].[OwnerFullName] = [g].[FullName] -ORDER BY [g].[FullName]", +) AS [g0] ON [w].[OwnerFullName] = [g0].[FullName] +ORDER BY [g0].[FullName]", Sql); } @@ -187,68 +189,68 @@ public override void Include_multiple_include_then_include() base.Include_multiple_include_then_include(); Assert.Equal( - @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [c].[Name], [c].[Location], [c0].[Name], [c0].[Location], [c1].[Name], [c1].[Location], [c2].[Name], [c2].[Location] + @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [c].[Name], [c].[Location], [c2].[Name], [c2].[Location], [c4].[Name], [c4].[Location], [c6].[Name], [c6].[Location] FROM [Gear] AS [g] LEFT JOIN [City] AS [c] ON [g].[AssignedCityName] = [c].[Name] -LEFT JOIN [City] AS [c0] ON [g].[AssignedCityName] = [c0].[Name] -INNER JOIN [City] AS [c1] ON [g].[CityOrBirthName] = [c1].[Name] -INNER JOIN [City] AS [c2] ON [g].[CityOrBirthName] = [c2].[Name] +LEFT JOIN [City] AS [c2] ON [g].[AssignedCityName] = [c2].[Name] +INNER JOIN [City] AS [c4] ON [g].[CityOrBirthName] = [c4].[Name] +INNER JOIN [City] AS [c6] ON [g].[CityOrBirthName] = [c6].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') -ORDER BY [g].[Nickname], [c].[Name], [c0].[Name], [c1].[Name], [c2].[Name] +ORDER BY [g].[Nickname], [c].[Name], [c2].[Name], [c4].[Name], [c6].[Name] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [c].[Id], [c].[GearNickName], [c].[GearSquadId], [c].[Note] -FROM [Gear] AS [g] +SELECT [g3].[Nickname], [g3].[SquadId], [g3].[AssignedCityName], [g3].[CityOrBirthName], [g3].[Discriminator], [g3].[FullName], [g3].[LeaderNickname], [g3].[LeaderSquadId], [g3].[Rank], [c7].[Id], [c7].[GearNickName], [c7].[GearSquadId], [c7].[Note] +FROM [Gear] AS [g3] INNER JOIN ( - SELECT DISTINCT [g].[Nickname], [c].[Name], [c0].[Name] AS [Name0], [c1].[Name] AS [Name1], [c2].[Name] AS [Name2] + SELECT DISTINCT [g].[Nickname], [c].[Name], [c2].[Name] AS [Name0], [c4].[Name] AS [Name1], [c6].[Name] AS [Name2] FROM [Gear] AS [g] LEFT JOIN [City] AS [c] ON [g].[AssignedCityName] = [c].[Name] - LEFT JOIN [City] AS [c0] ON [g].[AssignedCityName] = [c0].[Name] - INNER JOIN [City] AS [c1] ON [g].[CityOrBirthName] = [c1].[Name] - INNER JOIN [City] AS [c2] ON [g].[CityOrBirthName] = [c2].[Name] + LEFT JOIN [City] AS [c2] ON [g].[AssignedCityName] = [c2].[Name] + INNER JOIN [City] AS [c4] ON [g].[CityOrBirthName] = [c4].[Name] + INNER JOIN [City] AS [c6] ON [g].[CityOrBirthName] = [c6].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') -) AS [c2] ON [g].[AssignedCityName] = [c2].[Name2] -LEFT JOIN [CogTag] AS [c] ON ([c].[GearNickName] = [g].[Nickname]) AND ([c].[GearSquadId] = [g].[SquadId]) -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [c2].[Nickname], [c2].[Name], [c2].[Name0], [c2].[Name1], [c2].[Name2] +) AS [c60] ON [g3].[AssignedCityName] = [c60].[Name2] +LEFT JOIN [CogTag] AS [c7] ON ([c7].[GearNickName] = [g3].[Nickname]) AND ([c7].[GearSquadId] = [g3].[SquadId]) +WHERE ([g3].[Discriminator] = 'Officer') OR ([g3].[Discriminator] = 'Gear') +ORDER BY [c60].[Nickname], [c60].[Name], [c60].[Name0], [c60].[Name1], [c60].[Name2] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [c].[Id], [c].[GearNickName], [c].[GearSquadId], [c].[Note] -FROM [Gear] AS [g] +SELECT [g2].[Nickname], [g2].[SquadId], [g2].[AssignedCityName], [g2].[CityOrBirthName], [g2].[Discriminator], [g2].[FullName], [g2].[LeaderNickname], [g2].[LeaderSquadId], [g2].[Rank], [c5].[Id], [c5].[GearNickName], [c5].[GearSquadId], [c5].[Note] +FROM [Gear] AS [g2] INNER JOIN ( - SELECT DISTINCT [g].[Nickname], [c].[Name], [c0].[Name] AS [Name0], [c1].[Name] AS [Name1] + SELECT DISTINCT [g].[Nickname], [c].[Name], [c2].[Name] AS [Name0], [c4].[Name] AS [Name1] FROM [Gear] AS [g] LEFT JOIN [City] AS [c] ON [g].[AssignedCityName] = [c].[Name] - LEFT JOIN [City] AS [c0] ON [g].[AssignedCityName] = [c0].[Name] - INNER JOIN [City] AS [c1] ON [g].[CityOrBirthName] = [c1].[Name] + LEFT JOIN [City] AS [c2] ON [g].[AssignedCityName] = [c2].[Name] + INNER JOIN [City] AS [c4] ON [g].[CityOrBirthName] = [c4].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') -) AS [c1] ON [g].[CityOrBirthName] = [c1].[Name1] -LEFT JOIN [CogTag] AS [c] ON ([c].[GearNickName] = [g].[Nickname]) AND ([c].[GearSquadId] = [g].[SquadId]) -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [c1].[Nickname], [c1].[Name], [c1].[Name0], [c1].[Name1] +) AS [c40] ON [g2].[CityOrBirthName] = [c40].[Name1] +LEFT JOIN [CogTag] AS [c5] ON ([c5].[GearNickName] = [g2].[Nickname]) AND ([c5].[GearSquadId] = [g2].[SquadId]) +WHERE ([g2].[Discriminator] = 'Officer') OR ([g2].[Discriminator] = 'Gear') +ORDER BY [c40].[Nickname], [c40].[Name], [c40].[Name0], [c40].[Name1] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [c].[Id], [c].[GearNickName], [c].[GearSquadId], [c].[Note] -FROM [Gear] AS [g] +SELECT [g1].[Nickname], [g1].[SquadId], [g1].[AssignedCityName], [g1].[CityOrBirthName], [g1].[Discriminator], [g1].[FullName], [g1].[LeaderNickname], [g1].[LeaderSquadId], [g1].[Rank], [c3].[Id], [c3].[GearNickName], [c3].[GearSquadId], [c3].[Note] +FROM [Gear] AS [g1] INNER JOIN ( - SELECT DISTINCT [g].[Nickname], [c].[Name], [c0].[Name] AS [Name0] + SELECT DISTINCT [g].[Nickname], [c].[Name], [c2].[Name] AS [Name0] FROM [Gear] AS [g] LEFT JOIN [City] AS [c] ON [g].[AssignedCityName] = [c].[Name] - LEFT JOIN [City] AS [c0] ON [g].[AssignedCityName] = [c0].[Name] + LEFT JOIN [City] AS [c2] ON [g].[AssignedCityName] = [c2].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') -) AS [c0] ON [g].[AssignedCityName] = [c0].[Name0] -LEFT JOIN [CogTag] AS [c] ON ([c].[GearNickName] = [g].[Nickname]) AND ([c].[GearSquadId] = [g].[SquadId]) -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [c0].[Nickname], [c0].[Name], [c0].[Name0] +) AS [c20] ON [g1].[AssignedCityName] = [c20].[Name0] +LEFT JOIN [CogTag] AS [c3] ON ([c3].[GearNickName] = [g1].[Nickname]) AND ([c3].[GearSquadId] = [g1].[SquadId]) +WHERE ([g1].[Discriminator] = 'Officer') OR ([g1].[Discriminator] = 'Gear') +ORDER BY [c20].[Nickname], [c20].[Name], [c20].[Name0] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [c0].[Id], [c0].[GearNickName], [c0].[GearSquadId], [c0].[Note] -FROM [Gear] AS [g] +SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank], [c1].[Id], [c1].[GearNickName], [c1].[GearSquadId], [c1].[Note] +FROM [Gear] AS [g0] INNER JOIN ( SELECT DISTINCT [g].[Nickname], [c].[Name] FROM [Gear] AS [g] LEFT JOIN [City] AS [c] ON [g].[AssignedCityName] = [c].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') -) AS [c] ON [g].[CityOrBirthName] = [c].[Name] -LEFT JOIN [CogTag] AS [c0] ON ([c0].[GearNickName] = [g].[Nickname]) AND ([c0].[GearSquadId] = [g].[SquadId]) -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [c].[Nickname], [c].[Name]", +) AS [c0] ON [g0].[CityOrBirthName] = [c0].[Name] +LEFT JOIN [CogTag] AS [c1] ON ([c1].[GearNickName] = [g0].[Nickname]) AND ([c1].[GearSquadId] = [g0].[SquadId]) +WHERE ([g0].[Discriminator] = 'Officer') OR ([g0].[Discriminator] = 'Gear') +ORDER BY [c0].[Nickname], [c0].[Name]", Sql); } @@ -262,15 +264,15 @@ FROM [Gear] AS [g] WHERE [g].[Discriminator] = 'Officer' ORDER BY [g].[Nickname], [g].[SquadId] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gear] AS [g] +SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] +FROM [Gear] AS [g0] INNER JOIN ( SELECT DISTINCT [g].[Nickname], [g].[SquadId] FROM [Gear] AS [g] WHERE [g].[Discriminator] = 'Officer' -) AS [g0] ON ([g].[LeaderNickname] = [g0].[Nickname]) AND ([g].[LeaderSquadId] = [g0].[SquadId]) -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [g0].[Nickname], [g0].[SquadId]", +) AS [g1] ON ([g0].[LeaderNickname] = [g1].[Nickname]) AND ([g0].[LeaderSquadId] = [g1].[SquadId]) +WHERE ([g0].[Discriminator] = 'Officer') OR ([g0].[Discriminator] = 'Gear') +ORDER BY [g1].[Nickname], [g1].[SquadId]", Sql); } @@ -334,8 +336,8 @@ SELECT DISTINCT [g].[FullName] FROM [Gear] AS [g] INNER JOIN [CogTag] AS [t] ON ([g].[SquadId] = [t].[GearSquadId]) AND ([g].[Nickname] = [t].[GearNickName]) WHERE [g].[Discriminator] IN ('Officer', 'Gear') -) AS [g] ON [w].[OwnerFullName] = [g].[FullName] -ORDER BY [g].[FullName]", +) AS [g0] ON [w].[OwnerFullName] = [g0].[FullName] +ORDER BY [g0].[FullName]", Sql); } @@ -355,8 +357,8 @@ INNER JOIN ( SELECT DISTINCT [g].[FullName] FROM [CogTag] AS [t] INNER JOIN [Gear] AS [g] ON ([t].[GearSquadId] = [g].[SquadId]) AND ([t].[GearNickName] = [g].[Nickname]) -) AS [g] ON [w].[OwnerFullName] = [g].[FullName] -ORDER BY [g].[FullName]", +) AS [g0] ON [w].[OwnerFullName] = [g0].[FullName] +ORDER BY [g0].[FullName]", Sql); } @@ -372,17 +374,17 @@ INNER JOIN [CogTag] AS [t] ON ([g].[SquadId] = [t].[GearSquadId]) AND ([g].[Nick WHERE [g].[Discriminator] IN ('Officer', 'Gear') ORDER BY [c].[Name] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gear] AS [g] +SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] +FROM [Gear] AS [g0] INNER JOIN ( SELECT DISTINCT [c].[Name] FROM [Gear] AS [g] INNER JOIN [CogTag] AS [t] ON ([g].[SquadId] = [t].[GearSquadId]) AND ([g].[Nickname] = [t].[GearNickName]) INNER JOIN [City] AS [c] ON [g].[CityOrBirthName] = [c].[Name] WHERE [g].[Discriminator] IN ('Officer', 'Gear') -) AS [c] ON [g].[AssignedCityName] = [c].[Name] -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [c].[Name]", +) AS [c0] ON [g0].[AssignedCityName] = [c0].[Name] +WHERE ([g0].[Discriminator] = 'Officer') OR ([g0].[Discriminator] = 'Gear') +ORDER BY [c0].[Name]", Sql); } @@ -394,9 +396,9 @@ public override void Include_with_join_and_inheritance1() @"SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOrBirthName], [t0].[Discriminator], [t0].[FullName], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [c].[Name], [c].[Location] FROM [CogTag] AS [t] INNER JOIN ( - SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] - FROM [Gear] AS [g] - WHERE [g].[Discriminator] = 'Officer' + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gear] AS [g0] + WHERE [g0].[Discriminator] = 'Officer' ) AS [t0] ON ([t].[GearSquadId] = [t0].[SquadId]) AND ([t].[GearNickName] = [t0].[Nickname]) INNER JOIN [City] AS [c] ON [t0].[CityOrBirthName] = [c].[Name]", Sql); @@ -407,27 +409,27 @@ public override void Include_with_join_and_inheritance2() base.Include_with_join_and_inheritance2(); Assert.Equal( - @"SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOrBirthName], [t0].[Discriminator], [t0].[FullName], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank] + @"SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOrBirthName], [t].[Discriminator], [t].[FullName], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank] FROM ( - SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] - FROM [Gear] AS [g] - WHERE [g].[Discriminator] = 'Officer' -) AS [t0] -INNER JOIN [CogTag] AS [t] ON ([t0].[SquadId] = [t].[GearSquadId]) AND ([t0].[Nickname] = [t].[GearNickName]) -ORDER BY [t0].[FullName] + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gear] AS [g0] + WHERE [g0].[Discriminator] = 'Officer' +) AS [t] +INNER JOIN [CogTag] AS [t0] ON ([t].[SquadId] = [t0].[GearSquadId]) AND ([t].[Nickname] = [t0].[GearNickName]) +ORDER BY [t].[FullName] SELECT [w].[Id], [w].[AmmunitionType], [w].[IsAutomatic], [w].[Name], [w].[OwnerFullName], [w].[SynergyWithId] FROM [Weapon] AS [w] INNER JOIN ( - SELECT DISTINCT [t0].[FullName] + SELECT DISTINCT [t].[FullName] FROM ( - SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] - FROM [Gear] AS [g] - WHERE [g].[Discriminator] = 'Officer' - ) AS [t0] - INNER JOIN [CogTag] AS [t] ON ([t0].[SquadId] = [t].[GearSquadId]) AND ([t0].[Nickname] = [t].[GearNickName]) -) AS [t0] ON [w].[OwnerFullName] = [t0].[FullName] -ORDER BY [t0].[FullName]", + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gear] AS [g0] + WHERE [g0].[Discriminator] = 'Officer' + ) AS [t] + INNER JOIN [CogTag] AS [t0] ON ([t].[SquadId] = [t0].[GearSquadId]) AND ([t].[Nickname] = [t0].[GearNickName]) +) AS [t1] ON [w].[OwnerFullName] = [t1].[FullName] +ORDER BY [t1].[FullName]", Sql); } @@ -439,25 +441,25 @@ public override void Include_with_join_and_inheritance3() @"SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOrBirthName], [t0].[Discriminator], [t0].[FullName], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank] FROM [CogTag] AS [t] INNER JOIN ( - SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] - FROM [Gear] AS [g] - WHERE [g].[Discriminator] = 'Officer' + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gear] AS [g0] + WHERE [g0].[Discriminator] = 'Officer' ) AS [t0] ON ([t].[GearSquadId] = [t0].[SquadId]) AND ([t].[GearNickName] = [t0].[Nickname]) ORDER BY [t0].[Nickname], [t0].[SquadId] -SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gear] AS [g] +SELECT [g1].[Nickname], [g1].[SquadId], [g1].[AssignedCityName], [g1].[CityOrBirthName], [g1].[Discriminator], [g1].[FullName], [g1].[LeaderNickname], [g1].[LeaderSquadId], [g1].[Rank] +FROM [Gear] AS [g1] INNER JOIN ( SELECT DISTINCT [t0].[Nickname], [t0].[SquadId] FROM [CogTag] AS [t] INNER JOIN ( - SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] - FROM [Gear] AS [g] - WHERE [g].[Discriminator] = 'Officer' + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gear] AS [g0] + WHERE [g0].[Discriminator] = 'Officer' ) AS [t0] ON ([t].[GearSquadId] = [t0].[SquadId]) AND ([t].[GearNickName] = [t0].[Nickname]) -) AS [t0] ON ([g].[LeaderNickname] = [t0].[Nickname]) AND ([g].[LeaderSquadId] = [t0].[SquadId]) -WHERE ([g].[Discriminator] = 'Officer') OR ([g].[Discriminator] = 'Gear') -ORDER BY [t0].[Nickname], [t0].[SquadId]", +) AS [t00] ON ([g1].[LeaderNickname] = [t00].[Nickname]) AND ([g1].[LeaderSquadId] = [t00].[SquadId]) +WHERE ([g1].[Discriminator] = 'Officer') OR ([g1].[Discriminator] = 'Gear') +ORDER BY [t00].[Nickname], [t00].[SquadId]", Sql); } @@ -542,6 +544,35 @@ FROM [Weapon] AS [w] Sql); } + public override void Where_count_subquery_without_collision() + { + base.Where_count_subquery_without_collision(); + + Assert.Equal( + @"SELECT [w].[Nickname], [w].[SquadId], [w].[AssignedCityName], [w].[CityOrBirthName], [w].[Discriminator], [w].[FullName], [w].[LeaderNickname], [w].[LeaderSquadId], [w].[Rank] +FROM [Gear] AS [w] +WHERE [w].[Discriminator] IN ('Officer', 'Gear') AND (( + SELECT COUNT(*) + FROM [Weapon] AS [w0] + WHERE [w].[FullName] = [w0].[OwnerFullName] +) = 2)", + Sql); + } + + public override void Where_any_subquery_without_collision() + { + base.Where_any_subquery_without_collision(); + + Assert.Equal( + @"SELECT [w].[Nickname], [w].[SquadId], [w].[AssignedCityName], [w].[CityOrBirthName], [w].[Discriminator], [w].[FullName], [w].[LeaderNickname], [w].[LeaderSquadId], [w].[Rank] +FROM [Gear] AS [w] +WHERE [w].[Discriminator] IN ('Officer', 'Gear') AND EXISTS ( + SELECT 1 + FROM [Weapon] AS [w0] + WHERE [w].[FullName] = [w0].[OwnerFullName])", + Sql); + } + public override void Select_inverted_boolean() { base.Select_inverted_boolean(); @@ -820,9 +851,9 @@ public override void Collection_with_inheritance_and_join_include_joined() @"SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOrBirthName], [t0].[Discriminator], [t0].[FullName], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [c].[Id], [c].[GearNickName], [c].[GearSquadId], [c].[Note] FROM [CogTag] AS [t] INNER JOIN ( - SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] - FROM [Gear] AS [g] - WHERE [g].[Discriminator] = 'Officer' + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gear] AS [g0] + WHERE [g0].[Discriminator] = 'Officer' ) AS [t0] ON ([t].[GearSquadId] = [t0].[SquadId]) AND ([t].[GearNickName] = [t0].[Nickname]) LEFT JOIN [CogTag] AS [c] ON ([c].[GearNickName] = [t0].[Nickname]) AND ([c].[GearSquadId] = [t0].[SquadId])", Sql); @@ -833,14 +864,14 @@ public override void Collection_with_inheritance_and_join_include_source() base.Collection_with_inheritance_and_join_include_source(); Assert.Equal( - @"SELECT [t0].[Nickname], [t0].[SquadId], [t0].[AssignedCityName], [t0].[CityOrBirthName], [t0].[Discriminator], [t0].[FullName], [t0].[LeaderNickname], [t0].[LeaderSquadId], [t0].[Rank], [c].[Id], [c].[GearNickName], [c].[GearSquadId], [c].[Note] + @"SELECT [t].[Nickname], [t].[SquadId], [t].[AssignedCityName], [t].[CityOrBirthName], [t].[Discriminator], [t].[FullName], [t].[LeaderNickname], [t].[LeaderSquadId], [t].[Rank], [c].[Id], [c].[GearNickName], [c].[GearSquadId], [c].[Note] FROM ( - SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOrBirthName], [g].[Discriminator], [g].[FullName], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] - FROM [Gear] AS [g] - WHERE [g].[Discriminator] = 'Officer' -) AS [t0] -INNER JOIN [CogTag] AS [t] ON ([t0].[SquadId] = [t].[GearSquadId]) AND ([t0].[Nickname] = [t].[GearNickName]) -LEFT JOIN [CogTag] AS [c] ON ([c].[GearNickName] = [t0].[Nickname]) AND ([c].[GearSquadId] = [t0].[SquadId])", + SELECT [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOrBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank] + FROM [Gear] AS [g0] + WHERE [g0].[Discriminator] = 'Officer' +) AS [t] +INNER JOIN [CogTag] AS [t0] ON ([t].[SquadId] = [t0].[GearSquadId]) AND ([t].[Nickname] = [t0].[GearNickName]) +LEFT JOIN [CogTag] AS [c] ON ([c].[GearNickName] = [t].[Nickname]) AND ([c].[GearSquadId] = [t].[SquadId])", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/IncludeSqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/IncludeSqlServerTest.cs index 2f7571e47bc..0432347e8be 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/IncludeSqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/IncludeSqlServerTest.cs @@ -26,14 +26,14 @@ public override void Include_list() FROM [Products] AS [c] ORDER BY [c].[ProductID] -SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice], [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] -FROM [Order Details] AS [o] +SELECT [o0].[OrderID], [o0].[ProductID], [o0].[Discount], [o0].[Quantity], [o0].[UnitPrice], [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate] +FROM [Order Details] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[ProductID] FROM [Products] AS [c] -) AS [c] ON [o].[ProductID] = [c].[ProductID] -INNER JOIN [Orders] AS [o0] ON [o].[OrderID] = [o0].[OrderID] -ORDER BY [c].[ProductID]", +) AS [c0] ON [o0].[ProductID] = [c0].[ProductID] +INNER JOIN [Orders] AS [o1] ON [o0].[OrderID] = [o1].[OrderID] +ORDER BY [c0].[ProductID]", Sql); } @@ -46,13 +46,13 @@ public override void Include_collection() FROM [Customers] AS [c] ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -66,13 +66,13 @@ FROM [Orders] AS [o] LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] ORDER BY [o].[OrderID] -SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] -FROM [Order Details] AS [o] +SELECT [o00].[OrderID], [o00].[ProductID], [o00].[Discount], [o00].[Quantity], [o00].[UnitPrice] +FROM [Order Details] AS [o00] INNER JOIN ( SELECT DISTINCT [o].[OrderID] FROM [Orders] AS [o] -) AS [o0] ON [o].[OrderID] = [o0].[OrderID] -ORDER BY [o0].[OrderID]", +) AS [o1] ON [o00].[OrderID] = [o1].[OrderID] +ORDER BY [o1].[OrderID]", Sql); } @@ -125,15 +125,15 @@ FROM [Order Details] AS [od] LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o00].[OrderID], [o00].[CustomerID], [o00].[EmployeeID], [o00].[OrderDate] +FROM [Orders] AS [o00] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Order Details] AS [od] INNER JOIN [Orders] AS [o] ON [od].[OrderID] = [o].[OrderID] LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o00].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -148,16 +148,16 @@ FROM [Orders] AS [o] WHERE [o].[OrderID] = 10248 ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o00].[OrderID], [o00].[CustomerID], [o00].[EmployeeID], [o00].[OrderDate] +FROM [Orders] AS [o00] INNER JOIN ( SELECT DISTINCT TOP(2) [c].[CustomerID] FROM [Orders] AS [o] LEFT JOIN [Customers] AS [c] ON [o].[CustomerID] = [c].[CustomerID] WHERE [o].[OrderID] = 10248 ORDER BY [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o00].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -171,16 +171,16 @@ FROM [Orders] AS [o] WHERE [o].[OrderID] = 10248 ORDER BY [o].[OrderID] -SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice], [p].[ProductID], [p].[Discontinued], [p].[ProductName], [p].[UnitsInStock] -FROM [Order Details] AS [o] +SELECT [o00].[OrderID], [o00].[ProductID], [o00].[Discount], [o00].[Quantity], [o00].[UnitPrice], [p].[ProductID], [p].[Discontinued], [p].[ProductName], [p].[UnitsInStock] +FROM [Order Details] AS [o00] INNER JOIN ( SELECT DISTINCT TOP(2) [o].[OrderID] FROM [Orders] AS [o] WHERE [o].[OrderID] = 10248 ORDER BY [o].[OrderID] -) AS [o0] ON [o].[OrderID] = [o0].[OrderID] -INNER JOIN [Products] AS [p] ON [o].[ProductID] = [p].[ProductID] -ORDER BY [o0].[OrderID]", +) AS [o1] ON [o00].[OrderID] = [o1].[OrderID] +INNER JOIN [Products] AS [p] ON [o00].[ProductID] = [p].[ProductID] +ORDER BY [o1].[OrderID]", Sql); } @@ -193,13 +193,13 @@ public override void Include_collection_alias_generation() FROM [Orders] AS [o] ORDER BY [o].[OrderID] -SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] -FROM [Order Details] AS [o] +SELECT [o00].[OrderID], [o00].[ProductID], [o00].[Discount], [o00].[Quantity], [o00].[UnitPrice] +FROM [Order Details] AS [o00] INNER JOIN ( SELECT DISTINCT [o].[OrderID] FROM [Orders] AS [o] -) AS [o0] ON [o].[OrderID] = [o0].[OrderID] -ORDER BY [o0].[OrderID]", +) AS [o1] ON [o00].[OrderID] = [o1].[OrderID] +ORDER BY [o1].[OrderID]", Sql); } @@ -212,13 +212,13 @@ public override void Include_collection_order_by_key() FROM [Customers] AS [c] ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -231,13 +231,13 @@ public override void Include_collection_order_by_non_key() FROM [Customers] AS [c] ORDER BY [c].[City], [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[City], [c].[CustomerID] FROM [Customers] AS [c] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[City], [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[City], [c0].[CustomerID]", Sql); } @@ -250,13 +250,13 @@ public override void Include_collection_as_no_tracking() FROM [Customers] AS [c] ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -274,15 +274,15 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT TOP(2) [c].[CustomerID] FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -300,15 +300,15 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT TOP(2) [c].[CustomerID] FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -322,14 +322,14 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -343,14 +343,14 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -363,25 +363,25 @@ public override void Include_collection_then_include_collection() FROM [Customers] AS [c] ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID], [o].[OrderID] +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID], [o0].[OrderID] -SELECT [o].[OrderID], [o].[ProductID], [o].[Discount], [o].[Quantity], [o].[UnitPrice] -FROM [Order Details] AS [o] +SELECT [o10].[OrderID], [o10].[ProductID], [o10].[Discount], [o10].[Quantity], [o10].[UnitPrice] +FROM [Order Details] AS [o10] INNER JOIN ( - SELECT DISTINCT [c].[CustomerID], [o].[OrderID] - FROM [Orders] AS [o] + SELECT DISTINCT [c0].[CustomerID], [o0].[OrderID] + FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] - ) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -) AS [o0] ON [o].[OrderID] = [o0].[OrderID] -ORDER BY [o0].[CustomerID], [o0].[OrderID]", + ) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +) AS [o00] ON [o10].[OrderID] = [o00].[OrderID] +ORDER BY [o00].[CustomerID], [o00].[OrderID]", Sql); } @@ -406,15 +406,15 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o00].[OrderID], [o00].[CustomerID], [o00].[EmployeeID], [o00].[OrderDate] +FROM [Orders] AS [o00] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] WHERE [c].[CustomerID] = 'ALFKI' -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o00].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -429,15 +429,15 @@ CROSS JOIN [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c1] CROSS JOIN [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -448,29 +448,29 @@ public override void Include_collection_on_additional_from_clause() Assert.Equal( @"@__p_0: 5 -SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +SELECT [c1].[CustomerID], [c1].[Address], [c1].[City], [c1].[CompanyName], [c1].[ContactName], [c1].[ContactTitle], [c1].[Country], [c1].[Fax], [c1].[Phone], [c1].[PostalCode], [c1].[Region] FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0] -CROSS JOIN [Customers] AS [c] -ORDER BY [c].[CustomerID] + SELECT TOP(@__p_0) [c0].* + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] +) AS [t] +CROSS JOIN [Customers] AS [c1] +ORDER BY [c1].[CustomerID] @__p_0: 5 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( - SELECT DISTINCT [c].[CustomerID] + SELECT DISTINCT [c1].[CustomerID] FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t0] - CROSS JOIN [Customers] AS [c] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", + SELECT TOP(@__p_0) [c0].* + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + ) AS [t] + CROSS JOIN [Customers] AS [c1] +) AS [c10] ON [o0].[CustomerID] = [c10].[CustomerID] +ORDER BY [c10].[CustomerID]", Sql); } @@ -483,59 +483,59 @@ public override void Include_duplicate_collection() Assert.Equal( @"@__p_0: 2 -SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region], [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] +) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY -) AS [t1] -ORDER BY [t0].[CustomerID], [t1].[CustomerID] +) AS [t0] +ORDER BY [t].[CustomerID], [t0].[CustomerID] @__p_0: 2 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o10].[OrderID], [o10].[CustomerID], [o10].[EmployeeID], [o10].[OrderDate] +FROM [Orders] AS [o10] INNER JOIN ( - SELECT DISTINCT [t0].[CustomerID], [t1].[CustomerID] AS [CustomerID0] + SELECT DISTINCT [t].[CustomerID], [t0].[CustomerID] AS [CustomerID0] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + ) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY - ) AS [t1] -) AS [t1] ON [o].[CustomerID] = [t1].[CustomerID0] -ORDER BY [t1].[CustomerID], [t1].[CustomerID0] + ) AS [t0] +) AS [t00] ON [o10].[CustomerID] = [t00].[CustomerID0] +ORDER BY [t00].[CustomerID], [t00].[CustomerID0] @__p_0: 2 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( - SELECT DISTINCT [t0].[CustomerID] + SELECT DISTINCT [t].[CustomerID] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + ) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY - ) AS [t1] -) AS [t0] ON [o].[CustomerID] = [t0].[CustomerID] -ORDER BY [t0].[CustomerID]", + ) AS [t0] +) AS [t1] ON [o0].[CustomerID] = [t1].[CustomerID] +ORDER BY [t1].[CustomerID]", Sql); } } @@ -550,63 +550,63 @@ public override void Include_duplicate_collection_result_operator() @"@__p_1: 1 @__p_0: 2 -SELECT TOP(@__p_1) [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region], [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] +SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] +) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY -) AS [t1] -ORDER BY [t0].[CustomerID], [t1].[CustomerID] +) AS [t0] +ORDER BY [t].[CustomerID], [t0].[CustomerID] @__p_1: 1 @__p_0: 2 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o10].[OrderID], [o10].[CustomerID], [o10].[EmployeeID], [o10].[OrderDate] +FROM [Orders] AS [o10] INNER JOIN ( - SELECT DISTINCT TOP(@__p_1) [t0].[CustomerID], [t1].[CustomerID] AS [CustomerID0] + SELECT DISTINCT TOP(@__p_1) [t].[CustomerID], [t0].[CustomerID] AS [CustomerID0] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + ) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY - ) AS [t1] - ORDER BY [t0].[CustomerID], [t1].[CustomerID] -) AS [t1] ON [o].[CustomerID] = [t1].[CustomerID0] -ORDER BY [t1].[CustomerID], [t1].[CustomerID0] + ) AS [t0] + ORDER BY [t].[CustomerID], [t0].[CustomerID] +) AS [t00] ON [o10].[CustomerID] = [t00].[CustomerID0] +ORDER BY [t00].[CustomerID], [t00].[CustomerID0] @__p_1: 1 @__p_0: 2 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( - SELECT DISTINCT TOP(@__p_1) [t0].[CustomerID] + SELECT DISTINCT TOP(@__p_1) [t].[CustomerID] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + ) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY - ) AS [t1] - ORDER BY [t0].[CustomerID] -) AS [t0] ON [o].[CustomerID] = [t0].[CustomerID] -ORDER BY [t0].[CustomerID]", + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] ON [o0].[CustomerID] = [t1].[CustomerID] +ORDER BY [t1].[CustomerID]", Sql); } } @@ -622,15 +622,15 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[City], [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o00].[OrderID], [o00].[CustomerID], [o00].[EmployeeID], [o00].[OrderDate] +FROM [Orders] AS [o00] INNER JOIN ( SELECT DISTINCT [c].[City], [c].[CustomerID] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] WHERE [c].[CustomerID] = 'ALFKI' -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[City], [c].[CustomerID]", +) AS [c0] ON [o00].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[City], [c0].[CustomerID]", Sql); } @@ -641,13 +641,13 @@ public override void Include_collection_on_additional_from_clause2() Assert.Equal( @"@__p_0: 5 -SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0] -CROSS JOIN [Customers] AS [c]", + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] +) AS [t] +CROSS JOIN [Customers] AS [c1]", Sql); } @@ -660,41 +660,41 @@ public override void Include_duplicate_collection_result_operator2() @"@__p_1: 1 @__p_0: 2 -SELECT TOP(@__p_1) [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region], [t1].[CustomerID], [t1].[Address], [t1].[City], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Country], [t1].[Fax], [t1].[Phone], [t1].[PostalCode], [t1].[Region] +SELECT TOP(@__p_1) [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region], [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] +) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY -) AS [t1] -ORDER BY [t0].[CustomerID] +) AS [t0] +ORDER BY [t].[CustomerID] @__p_1: 1 @__p_0: 2 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( - SELECT DISTINCT TOP(@__p_1) [t0].[CustomerID] + SELECT DISTINCT TOP(@__p_1) [t].[CustomerID] FROM ( - SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] - ) AS [t0] + SELECT TOP(@__p_0) [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] + ) AS [t] CROSS JOIN ( - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] + SELECT [c2].[CustomerID], [c2].[Address], [c2].[City], [c2].[CompanyName], [c2].[ContactName], [c2].[ContactTitle], [c2].[Country], [c2].[Fax], [c2].[Phone], [c2].[PostalCode], [c2].[Region] + FROM [Customers] AS [c2] + ORDER BY [c2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY - ) AS [t1] - ORDER BY [t0].[CustomerID] -) AS [t0] ON [o].[CustomerID] = [t0].[CustomerID] -ORDER BY [t0].[CustomerID]", + ) AS [t0] + ORDER BY [t].[CustomerID] +) AS [t1] ON [o0].[CustomerID] = [t1].[CustomerID] +ORDER BY [t1].[CustomerID]", Sql); } } @@ -742,20 +742,20 @@ public override void Include_duplicate_reference() Assert.Equal( @"@__p_0: 2 -SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] FROM ( - SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[CustomerID] -) AS [t0] + SELECT TOP(@__p_0) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + ORDER BY [o0].[CustomerID] +) AS [t] CROSS JOIN ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[CustomerID] + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate] + FROM [Orders] AS [o2] + ORDER BY [o2].[CustomerID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY -) AS [t1] -LEFT JOIN [Customers] AS [c] ON [t0].[CustomerID] = [c].[CustomerID] -LEFT JOIN [Customers] AS [c0] ON [t1].[CustomerID] = [c0].[CustomerID]", +) AS [t0] +LEFT JOIN [Customers] AS [c] ON [t].[CustomerID] = [c].[CustomerID] +LEFT JOIN [Customers] AS [c0] ON [t0].[CustomerID] = [c0].[CustomerID]", Sql); } } @@ -769,19 +769,19 @@ public override void Include_duplicate_reference2() Assert.Equal( @"@__p_0: 2 -SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM ( - SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t0] + SELECT TOP(@__p_0) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + ORDER BY [o0].[OrderID] +) AS [t] CROSS JOIN ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate] + FROM [Orders] AS [o2] + ORDER BY [o2].[OrderID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY -) AS [t1] -LEFT JOIN [Customers] AS [c] ON [t0].[CustomerID] = [c].[CustomerID]", +) AS [t0] +LEFT JOIN [Customers] AS [c] ON [t].[CustomerID] = [c].[CustomerID]", Sql); } } @@ -795,19 +795,19 @@ public override void Include_duplicate_reference3() Assert.Equal( @"@__p_0: 2 -SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM ( - SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t0] + SELECT TOP(@__p_0) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + ORDER BY [o0].[OrderID] +) AS [t] CROSS JOIN ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate] + FROM [Orders] AS [o2] + ORDER BY [o2].[OrderID] OFFSET 2 ROWS FETCH NEXT 2 ROWS ONLY -) AS [t1] -LEFT JOIN [Customers] AS [c] ON [t1].[CustomerID] = [c].[CustomerID]", +) AS [t0] +LEFT JOIN [Customers] AS [c] ON [t0].[CustomerID] = [c].[CustomerID]", Sql); } } @@ -860,15 +860,15 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT TOP(2) [c].[CustomerID] FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -886,15 +886,15 @@ FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT TOP(2) [c].[CustomerID] FROM [Customers] AS [c] WHERE [c].[CustomerID] = 'ALFKI' ORDER BY [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -937,14 +937,14 @@ ORDER BY [c].[CustomerID] @__p_0: 5 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT TOP(@__p_0) [c].[CustomerID] FROM [Customers] AS [c] ORDER BY [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[CustomerID]", Sql); } @@ -971,14 +971,14 @@ FROM [Customers] AS [c] @__p_0: 10 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT TOP(@__p_0) [c].[City], [c].[CustomerID] FROM [Customers] AS [c] ORDER BY [c].[City] DESC, [c].[CustomerID] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[City] DESC, [c].[CustomerID]", +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[City] DESC, [c0].[CustomerID]", Sql); } @@ -997,18 +997,18 @@ OFFSET @__p_0 ROWS @__p_0: 80 -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] INNER JOIN ( - SELECT DISTINCT [t0].* + SELECT DISTINCT [t].* FROM ( SELECT [c].[ContactName], [c].[CustomerID] FROM [Customers] AS [c] ORDER BY [c].[ContactName], [c].[CustomerID] OFFSET @__p_0 ROWS - ) AS [t0] -) AS [c] ON [o].[CustomerID] = [c].[CustomerID] -ORDER BY [c].[ContactName], [c].[CustomerID]", + ) AS [t] +) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] +ORDER BY [c0].[ContactName], [c0].[CustomerID]", Sql); } } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceRelationshipsQuerySqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceRelationshipsQuerySqlServerTest.cs index c761e91cd07..8d2e0d636f1 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceRelationshipsQuerySqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceRelationshipsQuerySqlServerTest.cs @@ -192,15 +192,15 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') ORDER BY [e].[Id] -SELECT [b].[Id], [b].[BaseParentId], [b].[Discriminator], [b].[Name] -FROM [BaseCollectionOnBase] AS [b] +SELECT [b0].[Id], [b0].[BaseParentId], [b0].[Discriminator], [b0].[Name] +FROM [BaseCollectionOnBase] AS [b0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') -) AS [e] ON [b].[BaseParentId] = [e].[Id] -WHERE ([b].[Discriminator] = 'DerivedCollectionOnBase') OR ([b].[Discriminator] = 'BaseCollectionOnBase') -ORDER BY [e].[Id]", +) AS [e0] ON [b0].[BaseParentId] = [e0].[Id] +WHERE ([b0].[Discriminator] = 'DerivedCollectionOnBase') OR ([b0].[Discriminator] = 'BaseCollectionOnBase') +ORDER BY [e0].[Id]", Sql); } @@ -239,15 +239,15 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') AND (([e].[Name] <> 'Bar') OR [e].[Name] IS NULL) ORDER BY [e].[Id] -SELECT [b].[Id], [b].[BaseParentId], [b].[Discriminator], [b].[Name] -FROM [BaseCollectionOnBase] AS [b] +SELECT [b0].[Id], [b0].[BaseParentId], [b0].[Discriminator], [b0].[Name] +FROM [BaseCollectionOnBase] AS [b0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') AND (([e].[Name] <> 'Bar') OR [e].[Name] IS NULL) -) AS [e] ON [b].[BaseParentId] = [e].[Id] -WHERE ([b].[Discriminator] = 'DerivedCollectionOnBase') OR ([b].[Discriminator] = 'BaseCollectionOnBase') -ORDER BY [e].[Id]", +) AS [e0] ON [b0].[BaseParentId] = [e0].[Id] +WHERE ([b0].[Discriminator] = 'DerivedCollectionOnBase') OR ([b0].[Discriminator] = 'BaseCollectionOnBase') +ORDER BY [e0].[Id]", Sql); } @@ -286,14 +286,14 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') ORDER BY [e].[Id] -SELECT [c].[Id], [c].[Name], [c].[ParentId] -FROM [CollectionOnBase] AS [c] +SELECT [c0].[Id], [c0].[Name], [c0].[ParentId] +FROM [CollectionOnBase] AS [c0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') -) AS [e] ON [c].[ParentId] = [e].[Id] -ORDER BY [e].[Id]", +) AS [e0] ON [c0].[ParentId] = [e0].[Id] +ORDER BY [e0].[Id]", Sql); } @@ -322,14 +322,14 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') AND (([e].[Name] <> 'Bar') OR [e].[Name] IS NULL) ORDER BY [e].[Id] -SELECT [c].[Id], [c].[Name], [c].[ParentId] -FROM [CollectionOnBase] AS [c] +SELECT [c0].[Id], [c0].[Name], [c0].[ParentId] +FROM [CollectionOnBase] AS [c0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') AND (([e].[Name] <> 'Bar') OR [e].[Name] IS NULL) -) AS [e] ON [c].[ParentId] = [e].[Id] -ORDER BY [e].[Id]", +) AS [e0] ON [c0].[ParentId] = [e0].[Id] +ORDER BY [e0].[Id]", Sql); } @@ -544,15 +544,15 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] = 'DerivedInheritanceRelationshipEntity' ORDER BY [e].[Id] -SELECT [b].[Id], [b].[BaseParentId], [b].[Discriminator], [b].[Name] -FROM [BaseCollectionOnBase] AS [b] +SELECT [b0].[Id], [b0].[BaseParentId], [b0].[Discriminator], [b0].[Name] +FROM [BaseCollectionOnBase] AS [b0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] = 'DerivedInheritanceRelationshipEntity' -) AS [e] ON [b].[BaseParentId] = [e].[Id] -WHERE ([b].[Discriminator] = 'DerivedCollectionOnBase') OR ([b].[Discriminator] = 'BaseCollectionOnBase') -ORDER BY [e].[Id]", +) AS [e0] ON [b0].[BaseParentId] = [e0].[Id] +WHERE ([b0].[Discriminator] = 'DerivedCollectionOnBase') OR ([b0].[Discriminator] = 'BaseCollectionOnBase') +ORDER BY [e0].[Id]", Sql); } @@ -566,15 +566,15 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] = 'DerivedInheritanceRelationshipEntity' ORDER BY [e].[Id] -SELECT [b].[Id], [b].[Discriminator], [b].[Name], [b].[ParentId], [b].[DerivedInheritanceRelationshipEntityId] -FROM [BaseCollectionOnDerived] AS [b] +SELECT [b0].[Id], [b0].[Discriminator], [b0].[Name], [b0].[ParentId], [b0].[DerivedInheritanceRelationshipEntityId] +FROM [BaseCollectionOnDerived] AS [b0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] = 'DerivedInheritanceRelationshipEntity' -) AS [e] ON [b].[ParentId] = [e].[Id] -WHERE ([b].[Discriminator] = 'DerivedCollectionOnDerived') OR ([b].[Discriminator] = 'BaseCollectionOnDerived') -ORDER BY [e].[Id]", +) AS [e0] ON [b0].[ParentId] = [e0].[Id] +WHERE ([b0].[Discriminator] = 'DerivedCollectionOnDerived') OR ([b0].[Discriminator] = 'BaseCollectionOnDerived') +ORDER BY [e0].[Id]", Sql); } @@ -708,8 +708,8 @@ FROM [BaseReferenceOnBase] AS [b] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') ORDER BY [b].[Id] -SELECT [n].[Id], [n].[Discriminator], [n].[Name], [n].[ParentCollectionId], [n].[ParentReferenceId] -FROM [NestedCollectionBase] AS [n] +SELECT [n0].[Id], [n0].[Discriminator], [n0].[Name], [n0].[ParentCollectionId], [n0].[ParentReferenceId] +FROM [NestedCollectionBase] AS [n0] INNER JOIN ( SELECT DISTINCT [b].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] @@ -719,9 +719,9 @@ FROM [BaseReferenceOnBase] AS [b] WHERE ([b].[Discriminator] = 'DerivedReferenceOnBase') OR ([b].[Discriminator] = 'BaseReferenceOnBase') ) AS [b] ON [b].[BaseParentId] = [e].[Id] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') -) AS [b] ON [n].[ParentReferenceId] = [b].[Id] -WHERE ([n].[Discriminator] = 'NestedCollectionDerived') OR ([n].[Discriminator] = 'NestedCollectionBase') -ORDER BY [b].[Id]", +) AS [b0] ON [n0].[ParentReferenceId] = [b0].[Id] +WHERE ([n0].[Discriminator] = 'NestedCollectionDerived') OR ([n0].[Discriminator] = 'NestedCollectionBase') +ORDER BY [b0].[Id]", Sql); } @@ -749,8 +749,8 @@ FROM [BaseReferenceOnBase] AS [b] WHERE [e].[Discriminator] = 'DerivedInheritanceRelationshipEntity' ORDER BY [b].[Id] -SELECT [n].[Id], [n].[Discriminator], [n].[Name], [n].[ParentCollectionId], [n].[ParentReferenceId] -FROM [NestedCollectionBase] AS [n] +SELECT [n0].[Id], [n0].[Discriminator], [n0].[Name], [n0].[ParentCollectionId], [n0].[ParentReferenceId] +FROM [NestedCollectionBase] AS [n0] INNER JOIN ( SELECT DISTINCT [b].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] @@ -760,9 +760,9 @@ FROM [BaseReferenceOnBase] AS [b] WHERE ([b].[Discriminator] = 'DerivedReferenceOnBase') OR ([b].[Discriminator] = 'BaseReferenceOnBase') ) AS [b] ON [b].[BaseParentId] = [e].[Id] WHERE [e].[Discriminator] = 'DerivedInheritanceRelationshipEntity' -) AS [b] ON [n].[ParentReferenceId] = [b].[Id] -WHERE ([n].[Discriminator] = 'NestedCollectionDerived') OR ([n].[Discriminator] = 'NestedCollectionBase') -ORDER BY [b].[Id]", +) AS [b0] ON [n0].[ParentReferenceId] = [b0].[Id] +WHERE ([n0].[Discriminator] = 'NestedCollectionDerived') OR ([n0].[Discriminator] = 'NestedCollectionBase') +ORDER BY [b0].[Id]", Sql); } @@ -806,20 +806,20 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') ORDER BY [e].[Id] -SELECT [b].[Id], [b].[BaseParentId], [b].[Discriminator], [b].[Name], [n].[Id], [n].[Discriminator], [n].[Name], [n].[ParentCollectionId], [n].[ParentReferenceId] -FROM [BaseCollectionOnBase] AS [b] +SELECT [b0].[Id], [b0].[BaseParentId], [b0].[Discriminator], [b0].[Name], [n].[Id], [n].[Discriminator], [n].[Name], [n].[ParentCollectionId], [n].[ParentReferenceId] +FROM [BaseCollectionOnBase] AS [b0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') -) AS [e] ON [b].[BaseParentId] = [e].[Id] +) AS [e0] ON [b0].[BaseParentId] = [e0].[Id] LEFT JOIN ( SELECT [n].* FROM [NestedReferenceBase] AS [n] WHERE ([n].[Discriminator] = 'NestedReferenceDerived') OR ([n].[Discriminator] = 'NestedReferenceBase') -) AS [n] ON [n].[ParentCollectionId] = [b].[Id] -WHERE ([b].[Discriminator] = 'DerivedCollectionOnBase') OR ([b].[Discriminator] = 'BaseCollectionOnBase') -ORDER BY [e].[Id]", +) AS [n] ON [n].[ParentCollectionId] = [b0].[Id] +WHERE ([b0].[Discriminator] = 'DerivedCollectionOnBase') OR ([b0].[Discriminator] = 'BaseCollectionOnBase') +ORDER BY [e0].[Id]", Sql); } @@ -881,30 +881,30 @@ FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') ORDER BY [e].[Id] -SELECT [b].[Id], [b].[BaseParentId], [b].[Discriminator], [b].[Name] -FROM [BaseCollectionOnBase] AS [b] +SELECT [b0].[Id], [b0].[BaseParentId], [b0].[Discriminator], [b0].[Name] +FROM [BaseCollectionOnBase] AS [b0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') -) AS [e] ON [b].[BaseParentId] = [e].[Id] -WHERE ([b].[Discriminator] = 'DerivedCollectionOnBase') OR ([b].[Discriminator] = 'BaseCollectionOnBase') -ORDER BY [e].[Id], [b].[Id] +) AS [e0] ON [b0].[BaseParentId] = [e0].[Id] +WHERE ([b0].[Discriminator] = 'DerivedCollectionOnBase') OR ([b0].[Discriminator] = 'BaseCollectionOnBase') +ORDER BY [e0].[Id], [b0].[Id] -SELECT [n].[Id], [n].[Discriminator], [n].[Name], [n].[ParentCollectionId], [n].[ParentReferenceId] -FROM [NestedCollectionBase] AS [n] +SELECT [n0].[Id], [n0].[Discriminator], [n0].[Name], [n0].[ParentCollectionId], [n0].[ParentReferenceId] +FROM [NestedCollectionBase] AS [n0] INNER JOIN ( - SELECT DISTINCT [e].[Id], [b].[Id] AS [Id0] - FROM [BaseCollectionOnBase] AS [b] + SELECT DISTINCT [e0].[Id], [b0].[Id] AS [Id0] + FROM [BaseCollectionOnBase] AS [b0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [BaseInheritanceRelationshipEntity] AS [e] WHERE [e].[Discriminator] IN ('DerivedInheritanceRelationshipEntity', 'BaseInheritanceRelationshipEntity') - ) AS [e] ON [b].[BaseParentId] = [e].[Id] - WHERE ([b].[Discriminator] = 'DerivedCollectionOnBase') OR ([b].[Discriminator] = 'BaseCollectionOnBase') -) AS [b] ON [n].[ParentCollectionId] = [b].[Id0] -WHERE ([n].[Discriminator] = 'NestedCollectionDerived') OR ([n].[Discriminator] = 'NestedCollectionBase') -ORDER BY [b].[Id], [b].[Id0]", + ) AS [e0] ON [b0].[BaseParentId] = [e0].[Id] + WHERE ([b0].[Discriminator] = 'DerivedCollectionOnBase') OR ([b0].[Discriminator] = 'BaseCollectionOnBase') +) AS [b00] ON [n0].[ParentCollectionId] = [b00].[Id0] +WHERE ([n0].[Discriminator] = 'NestedCollectionDerived') OR ([n0].[Discriminator] = 'NestedCollectionBase') +ORDER BY [b00].[Id], [b00].[Id0]", Sql); } @@ -965,14 +965,14 @@ public override void Nested_include_collection_reference_on_non_entity_base() FROM [ReferencedEntity] AS [e] ORDER BY [e].[Id] -SELECT [p].[Id], [p].[Name], [p].[ReferenceId], [p].[ReferencedEntityId], [r].[Id], [r].[Name] -FROM [PrincipalEntity] AS [p] +SELECT [p0].[Id], [p0].[Name], [p0].[ReferenceId], [p0].[ReferencedEntityId], [r].[Id], [r].[Name] +FROM [PrincipalEntity] AS [p0] INNER JOIN ( SELECT DISTINCT [e].[Id] FROM [ReferencedEntity] AS [e] -) AS [e] ON [p].[ReferencedEntityId] = [e].[Id] -LEFT JOIN [ReferencedEntity] AS [r] ON [p].[ReferenceId] = [r].[Id] -ORDER BY [e].[Id]", +) AS [e0] ON [p0].[ReferencedEntityId] = [e0].[Id] +LEFT JOIN [ReferencedEntity] AS [r] ON [p0].[ReferenceId] = [r].[Id] +ORDER BY [e0].[Id]", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceSqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceSqlServerTest.cs index 1325b5cbcad..1fac7b0630d 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceSqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/InheritanceSqlServerTest.cs @@ -13,13 +13,13 @@ public override void Can_use_of_type_animal() base.Can_use_of_type_animal(); Assert.Equal( - @"SELECT [t0].[Species], [t0].[CountryId], [t0].[Discriminator], [t0].[Name], [t0].[EagleId], [t0].[IsFlightless], [t0].[Group], [t0].[FoundOn] + @"SELECT [t].[Species], [t].[CountryId], [t].[Discriminator], [t].[Name], [t].[EagleId], [t].[IsFlightless], [t].[Group], [t].[FoundOn] FROM ( - SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[Group], [a].[FoundOn] - FROM [Animal] AS [a] - WHERE [a].[Discriminator] IN ('Kiwi', 'Eagle') -) AS [t0] -ORDER BY [t0].[Species]", + SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[Group], [a0].[FoundOn] + FROM [Animal] AS [a0] + WHERE [a0].[Discriminator] IN ('Kiwi', 'Eagle') +) AS [t] +ORDER BY [t].[Species]", Sql); } @@ -28,13 +28,13 @@ public override void Can_use_of_type_bird() base.Can_use_of_type_bird(); Assert.Equal( - @"SELECT [t0].[Species], [t0].[CountryId], [t0].[Discriminator], [t0].[Name], [t0].[EagleId], [t0].[IsFlightless], [t0].[Group], [t0].[FoundOn] + @"SELECT [t].[Species], [t].[CountryId], [t].[Discriminator], [t].[Name], [t].[EagleId], [t].[IsFlightless], [t].[Group], [t].[FoundOn] FROM ( - SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[Group], [a].[FoundOn] - FROM [Animal] AS [a] - WHERE [a].[Discriminator] IN ('Kiwi', 'Eagle') -) AS [t0] -ORDER BY [t0].[Species]", + SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[Group], [a0].[FoundOn] + FROM [Animal] AS [a0] + WHERE [a0].[Discriminator] IN ('Kiwi', 'Eagle') +) AS [t] +ORDER BY [t].[Species]", Sql); } @@ -43,13 +43,13 @@ public override void Can_use_of_type_bird_predicate() base.Can_use_of_type_bird_predicate(); Assert.Equal( - @"SELECT [t0].[Species], [t0].[CountryId], [t0].[Discriminator], [t0].[Name], [t0].[EagleId], [t0].[IsFlightless], [t0].[Group], [t0].[FoundOn] + @"SELECT [t].[Species], [t].[CountryId], [t].[Discriminator], [t].[Name], [t].[EagleId], [t].[IsFlightless], [t].[Group], [t].[FoundOn] FROM ( - SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[Group], [a].[FoundOn] - FROM [Animal] AS [a] - WHERE [a].[Discriminator] IN ('Kiwi', 'Eagle') AND ([a].[CountryId] = 1) -) AS [t0] -ORDER BY [t0].[Species]", + SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[Group], [a0].[FoundOn] + FROM [Animal] AS [a0] + WHERE [a0].[Discriminator] IN ('Kiwi', 'Eagle') AND ([a0].[CountryId] = 1) +) AS [t] +ORDER BY [t].[Species]", Sql); } @@ -58,12 +58,12 @@ public override void Can_use_of_type_bird_with_projection() base.Can_use_of_type_bird_with_projection(); Assert.Equal( - @"SELECT [t0].[EagleId] + @"SELECT [t].[EagleId] FROM ( - SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[Group], [a].[FoundOn] - FROM [Animal] AS [a] - WHERE [a].[Discriminator] IN ('Kiwi', 'Eagle') -) AS [t0]", + SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[Group], [a0].[FoundOn] + FROM [Animal] AS [a0] + WHERE [a0].[Discriminator] IN ('Kiwi', 'Eagle') +) AS [t]", Sql); } @@ -72,13 +72,13 @@ public override void Can_use_of_type_bird_first() base.Can_use_of_type_bird_first(); Assert.Equal( - @"SELECT TOP(1) [t0].[Species], [t0].[CountryId], [t0].[Discriminator], [t0].[Name], [t0].[EagleId], [t0].[IsFlightless], [t0].[Group], [t0].[FoundOn] + @"SELECT TOP(1) [t].[Species], [t].[CountryId], [t].[Discriminator], [t].[Name], [t].[EagleId], [t].[IsFlightless], [t].[Group], [t].[FoundOn] FROM ( - SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[Group], [a].[FoundOn] - FROM [Animal] AS [a] - WHERE [a].[Discriminator] IN ('Kiwi', 'Eagle') -) AS [t0] -ORDER BY [t0].[Species]", + SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[Group], [a0].[FoundOn] + FROM [Animal] AS [a0] + WHERE [a0].[Discriminator] IN ('Kiwi', 'Eagle') +) AS [t] +ORDER BY [t].[Species]", Sql); } @@ -185,16 +185,16 @@ FROM [Animal] AS [e] WHERE [e].[Discriminator] = 'Eagle' ORDER BY [e].[Species] -SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[Group], [a].[FoundOn] -FROM [Animal] AS [a] +SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[Group], [a0].[FoundOn] +FROM [Animal] AS [a0] INNER JOIN ( SELECT DISTINCT TOP(2) [e].[Species] FROM [Animal] AS [e] WHERE [e].[Discriminator] = 'Eagle' ORDER BY [e].[Species] -) AS [e] ON [a].[EagleId] = [e].[Species] -WHERE ([a].[Discriminator] = 'Kiwi') OR ([a].[Discriminator] = 'Eagle') -ORDER BY [e].[Species]", +) AS [e0] ON [a0].[EagleId] = [e0].[Species] +WHERE ([a0].[Discriminator] = 'Kiwi') OR ([a0].[Discriminator] = 'Eagle') +ORDER BY [e0].[Species]", Sql); } @@ -207,14 +207,14 @@ public override void Can_include_animals() FROM [Country] AS [c] ORDER BY [c].[Name], [c].[Id] -SELECT [a].[Species], [a].[CountryId], [a].[Discriminator], [a].[Name], [a].[EagleId], [a].[IsFlightless], [a].[Group], [a].[FoundOn] -FROM [Animal] AS [a] +SELECT [a0].[Species], [a0].[CountryId], [a0].[Discriminator], [a0].[Name], [a0].[EagleId], [a0].[IsFlightless], [a0].[Group], [a0].[FoundOn] +FROM [Animal] AS [a0] INNER JOIN ( SELECT DISTINCT [c].[Name], [c].[Id] FROM [Country] AS [c] -) AS [c] ON [a].[CountryId] = [c].[Id] -WHERE ([a].[Discriminator] = 'Kiwi') OR ([a].[Discriminator] = 'Eagle') -ORDER BY [c].[Name], [c].[Id]", +) AS [c0] ON [a0].[CountryId] = [c0].[Id] +WHERE ([a0].[Discriminator] = 'Kiwi') OR ([a0].[Discriminator] = 'Eagle') +ORDER BY [c0].[Name], [c0].[Id]", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryBugsTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryBugsTest.cs index 7aa9bc48985..02a501a997c 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryBugsTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryBugsTest.cs @@ -147,13 +147,13 @@ public void Include_on_entity_with_composite_key_One_To_Many_bugs_925_926() FROM [Customer] AS [c] ORDER BY [c].[FirstName], [c].[LastName] -SELECT [o].[Id], [o].[CustomerFirstName], [o].[CustomerLastName], [o].[Name] -FROM [Order] AS [o] +SELECT [o0].[Id], [o0].[CustomerFirstName], [o0].[CustomerLastName], [o0].[Name] +FROM [Order] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[FirstName], [c].[LastName] FROM [Customer] AS [c] -) AS [c] ON ([o].[CustomerFirstName] = [c].[FirstName]) AND ([o].[CustomerLastName] = [c].[LastName]) -ORDER BY [c].[FirstName], [c].[LastName]"; +) AS [c0] ON ([o0].[CustomerFirstName] = [c0].[FirstName]) AND ([o0].[CustomerLastName] = [c0].[LastName]) +ORDER BY [c0].[FirstName], [c0].[LastName]"; Assert.Equal(expectedSql, TestSqlLoggerFactory.Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryLoggingSqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryLoggingSqlServerTest.cs index 63685993f00..61d21bbd0f0 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryLoggingSqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryLoggingSqlServerTest.cs @@ -92,13 +92,13 @@ ORDER BY [c].[CustomerID] relatedValueBuffers: IEnumerable<ValueBuffer> _Query( queryContext: queryContext, shaperCommandContext: SelectExpression: - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] INNER JOIN ( SELECT DISTINCT [c].[CustomerID] FROM [Customers] AS [c] - ) AS [c] ON [o].[CustomerID] = [c].[CustomerID] - ORDER BY [c].[CustomerID] + ) AS [c0] ON [o0].[CustomerID] = [c0].[CustomerID] + ORDER BY [c0].[CustomerID] , queryIndex: 1 ) diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryNavigationsSqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryNavigationsSqlServerTest.cs index c61cd0ac6d3..8532ae5825a 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryNavigationsSqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QueryNavigationsSqlServerTest.cs @@ -249,23 +249,23 @@ FROM [Orders] AS [o] INNER JOIN [Customers] AS [o.Customer] ON [o].[CustomerID] = [o.Customer].[CustomerID] WHERE [o].[CustomerID] = 'ALFKI' -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]", +SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] +FROM [Orders] AS [o0]", Sql); } @@ -278,8 +278,8 @@ public override void Collection_select_nav_prop_any() SELECT CASE WHEN EXISTS ( SELECT 1 - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID]) + FROM [Orders] AS [o0] + WHERE [c].[CustomerID] = [o0].[CustomerID]) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END ) @@ -324,8 +324,8 @@ public override void Collection_select_nav_prop_all() SELECT CASE WHEN NOT EXISTS ( SELECT 1 - FROM [Orders] AS [o] - WHERE (([c].[CustomerID] = [o].[CustomerID]) AND [o].[CustomerID] IS NOT NULL) AND NOT (([o].[CustomerID] = 'ALFKI') AND [o].[CustomerID] IS NOT NULL)) + FROM [Orders] AS [o0] + WHERE (([c].[CustomerID] = [o0].[CustomerID]) AND [o0].[CustomerID] IS NOT NULL) AND NOT (([o0].[CustomerID] = 'ALFKI') AND [o0].[CustomerID] IS NOT NULL)) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END ) @@ -341,8 +341,8 @@ public override void Collection_select_nav_prop_all_client() @"SELECT [c].[CustomerID] FROM [Customers] AS [c] -SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] -FROM [Orders] AS [o]", +SELECT [o1].[OrderID], [o1].[CustomerID], [o1].[EmployeeID], [o1].[OrderDate] +FROM [Orders] AS [o1]", Sql); } @@ -380,8 +380,8 @@ public override void Collection_select_nav_prop_count() Assert.Equal( @"SELECT ( SELECT COUNT(*) - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID] + FROM [Orders] AS [o0] + WHERE [c].[CustomerID] = [o0].[CustomerID] ) FROM [Customers] AS [c]", Sql); @@ -439,8 +439,8 @@ public override void Collection_select_nav_prop_long_count() Assert.Equal( @"SELECT ( SELECT COUNT_BIG(*) - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID] + FROM [Orders] AS [o0] + WHERE [c].[CustomerID] = [o0].[CustomerID] ) FROM [Customers] AS [c]", Sql); @@ -453,14 +453,14 @@ public override void Select_multiple_complex_projections() Assert.Equal( @"SELECT ( SELECT COUNT(*) - FROM [Order Details] AS [o] - WHERE [o].[OrderID] = [o].[OrderID] + FROM [Order Details] AS [o2] + WHERE [o].[OrderID] = [o2].[OrderID] ), ( SELECT CASE WHEN EXISTS ( SELECT 1 - FROM [Order Details] AS [od] - WHERE ([od].[UnitPrice] > 10) AND ([o].[OrderID] = [od].[OrderID])) + FROM [Order Details] AS [od1] + WHERE ([od1].[UnitPrice] > 10) AND ([o].[OrderID] = [od1].[OrderID])) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END ), CASE @@ -470,14 +470,14 @@ THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) SELECT CASE WHEN NOT EXISTS ( SELECT 1 - FROM [Order Details] AS [od] - WHERE ([o].[OrderID] = [od].[OrderID]) AND ([od].[OrderID] <> 42)) + FROM [Order Details] AS [od2] + WHERE ([o].[OrderID] = [od2].[OrderID]) AND ([od2].[OrderID] <> 42)) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END ), ( SELECT COUNT_BIG(*) - FROM [Order Details] AS [o] - WHERE [o].[OrderID] = [o].[OrderID] + FROM [Order Details] AS [o3] + WHERE [o].[OrderID] = [o3].[OrderID] ), [o].[OrderDate] FROM [Orders] AS [o] WHERE [o].[CustomerID] LIKE 'A' + '%'", @@ -490,9 +490,9 @@ public override void Collection_select_nav_prop_sum() Assert.Equal( @"SELECT ( - SELECT SUM([o].[OrderID]) - FROM [Orders] AS [o] - WHERE [c].[CustomerID] = [o].[CustomerID] + SELECT SUM([o0].[OrderID]) + FROM [Orders] AS [o0] + WHERE [c].[CustomerID] = [o0].[CustomerID] ) FROM [Customers] AS [c]", Sql); @@ -603,12 +603,12 @@ SELECT 1 SELECT [o].[OrderID], [o].[ProductID] FROM [Order Details] AS [o] WHERE [p].[ProductID] = [o].[ProductID] - ) AS [t] + ) AS [t00] INNER JOIN ( SELECT TOP(1) [orderDetail].[OrderID], [orderDetail].[ProductID] FROM [Order Details] AS [orderDetail] WHERE [orderDetail].[Quantity] = 1 - ) AS [t0] ON ([t].[OrderID] = [t0].[OrderID]) AND ([t].[ProductID] = [t0].[ProductID]))", + ) AS [t1] ON ([t00].[OrderID] = [t1].[OrderID]) AND ([t00].[ProductID] = [t1].[ProductID]))", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QuerySqlServerTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QuerySqlServerTest.cs index 0194e73dfbd..40b4736ee75 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QuerySqlServerTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/QuerySqlServerTest.cs @@ -28,39 +28,39 @@ public override void Default_if_empty_top_level() base.Default_if_empty_top_level(); Assert.Equal( - @"SELECT [t0].[EmployeeID], [t0].[City], [t0].[Country], [t0].[FirstName], [t0].[ReportsTo], [t0].[Title] + @"SELECT [t].[EmployeeID], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title] FROM ( SELECT NULL AS [empty] -) AS [empty] +) AS [empty0] LEFT JOIN ( SELECT [c].[EmployeeID], [c].[City], [c].[Country], [c].[FirstName], [c].[ReportsTo], [c].[Title] FROM [Employees] AS [c] WHERE [c].[EmployeeID] = -1 -) AS [t0] ON 1 = 1", +) AS [t] ON 1 = 1", Sql); } public override void Default_if_empty_top_level_positive() { base.Default_if_empty_top_level_positive(); - + Assert.Equal( - @"SELECT [t0].[EmployeeID], [t0].[City], [t0].[Country], [t0].[FirstName], [t0].[ReportsTo], [t0].[Title] + @"SELECT [t].[EmployeeID], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title] FROM ( SELECT NULL AS [empty] -) AS [empty] +) AS [empty0] LEFT JOIN ( SELECT [c].[EmployeeID], [c].[City], [c].[Country], [c].[FirstName], [c].[ReportsTo], [c].[Title] FROM [Employees] AS [c] WHERE [c].[EmployeeID] > 0 -) AS [t0] ON 1 = 1", +) AS [t] ON 1 = 1", Sql); } public override void Default_if_empty_top_level_arg() { base.Default_if_empty_top_level_arg(); - + Assert.Equal( @"SELECT [c].[EmployeeID], [c].[City], [c].[Country], [c].[FirstName], [c].[ReportsTo], [c].[Title] FROM [Employees] AS [c] @@ -73,15 +73,15 @@ public override void Default_if_empty_top_level_projection() base.Default_if_empty_top_level_projection(); Assert.Equal( - @"SELECT [t0].[EmployeeID] + @"SELECT [t].[EmployeeID] FROM ( SELECT NULL AS [empty] -) AS [empty] +) AS [empty0] LEFT JOIN ( SELECT [e].[EmployeeID] FROM [Employees] AS [e] WHERE [e].[EmployeeID] = -1 -) AS [t0] ON 1 = 1", +) AS [t] ON 1 = 1", Sql); } @@ -194,11 +194,11 @@ public override void Select_Where_Subquery_Deep_Single() @"SELECT [od].[OrderID], [od].[ProductID], [od].[Discount], [od].[Quantity], [od].[UnitPrice] FROM [Order Details] AS [od] -SELECT [o].[OrderID], [o].[CustomerID] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID] +FROM [Orders] AS [o0] -SELECT [c].[CustomerID], [c].[City] -FROM [Customers] AS [c]", +SELECT [c0].[CustomerID], [c0].[City] +FROM [Customers] AS [c0]", Sql); } @@ -210,11 +210,11 @@ public override void Select_Where_Subquery_Deep_First() @"SELECT [od].[OrderID], [od].[ProductID], [od].[Discount], [od].[Quantity], [od].[UnitPrice] FROM [Order Details] AS [od] -SELECT [o].[OrderID], [o].[CustomerID] -FROM [Orders] AS [o] +SELECT [o0].[OrderID], [o0].[CustomerID] +FROM [Orders] AS [o0] -SELECT [c].[CustomerID], [c].[City] -FROM [Customers] AS [c]", +SELECT [c0].[CustomerID], [c0].[City] +FROM [Customers] AS [c0]", Sql); } @@ -225,15 +225,15 @@ public override void Where_subquery_anon() Assert.Equal( @"@__p_0: 9 -SELECT [t0].[EmployeeID], [t0].[City], [t0].[Country], [t0].[FirstName], [t0].[ReportsTo], [t0].[Title], [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] +SELECT [t].[EmployeeID], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title], [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] FROM ( - SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] - FROM [Employees] AS [e] -) AS [t0] + SELECT TOP(@__p_0) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] + FROM [Employees] AS [e0] +) AS [t] CROSS JOIN ( - SELECT TOP(1000) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] -) AS [t1]", + SELECT TOP(1000) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] +) AS [t0]", Sql); } @@ -826,7 +826,7 @@ public override void Distinct_Count() FROM ( SELECT DISTINCT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] -) AS [t0]", +) AS [t]", Sql); } @@ -840,7 +840,7 @@ public override void Select_Distinct_Count() FROM ( SELECT DISTINCT [c].[City] FROM [Customers] AS [c] -) AS [t0]", +) AS [t]", Sql); } @@ -939,13 +939,13 @@ public override void Take_Skip() @"@__p_0: 10 @__p_1: 5 -SELECT [t0].* +SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[ContactName] -) AS [t0] -ORDER BY [t0].[ContactName] +) AS [t] +ORDER BY [t].[ContactName] OFFSET @__p_1 ROWS", Sql); } @@ -960,17 +960,17 @@ public override void Take_Skip_Distinct() @"@__p_0: 10 @__p_1: 5 -SELECT DISTINCT [t1].* +SELECT DISTINCT [t0].* FROM ( - SELECT [t0].* + SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[ContactName] - ) AS [t0] - ORDER BY [t0].[ContactName] + ) AS [t] + ORDER BY [t].[ContactName] OFFSET @__p_1 ROWS -) AS [t1]", +) AS [t0]", Sql); } @@ -984,32 +984,32 @@ public override void Take_Skip_Distinct_Caching() @"@__p_0: 10 @__p_1: 5 -SELECT DISTINCT [t1].* +SELECT DISTINCT [t0].* FROM ( - SELECT [t0].* + SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[ContactName] - ) AS [t0] - ORDER BY [t0].[ContactName] + ) AS [t] + ORDER BY [t].[ContactName] OFFSET @__p_1 ROWS -) AS [t1] +) AS [t0] @__p_0: 15 @__p_1: 10 -SELECT DISTINCT [t1].* +SELECT DISTINCT [t0].* FROM ( - SELECT [t0].* + SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[ContactName] - ) AS [t0] - ORDER BY [t0].[ContactName] + ) AS [t] + ORDER BY [t].[ContactName] OFFSET @__p_1 ROWS -) AS [t1]", +) AS [t0]", Sql); } @@ -1029,7 +1029,7 @@ SELECT COUNT(*) FROM ( SELECT DISTINCT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o] -) AS [t0]", +) AS [t]", Sql); } @@ -1045,7 +1045,7 @@ SELECT COUNT(*) SELECT DISTINCT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o] WHERE [o].[CustomerID] = 'FRANK' -) AS [t0]", +) AS [t]", Sql); } @@ -1086,11 +1086,11 @@ public override void Queryable_simple_anonymous_projection_subquery() Assert.Equal( @"@__p_0: 91 -SELECT [t0].[City] +SELECT [t].[City] FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] -) AS [t0]", + SELECT TOP(@__p_0) [c0].* + FROM [Customers] AS [c0] +) AS [t]", Sql); } @@ -1152,12 +1152,12 @@ public override void Take_subquery_projection() Assert.Equal( @"@__p_0: 2 -SELECT [t0].[City] +SELECT [t].[City] FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] - ORDER BY [c].[CustomerID] -) AS [t0]", + SELECT TOP(@__p_0) [c0].* + FROM [Customers] AS [c0] + ORDER BY [c0].[CustomerID] +) AS [t]", Sql); } @@ -1173,7 +1173,7 @@ SELECT COUNT(*) SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM [Orders] AS [o] ORDER BY [o].[OrderID] -) AS [t0]", +) AS [t]", Sql); } @@ -1186,9 +1186,9 @@ public override void Take_OrderBy_Count() SELECT COUNT(*) FROM ( - SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] -) AS [t0]", + SELECT TOP(@__p_0) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] +) AS [t]", Sql); } @@ -1400,11 +1400,11 @@ public override void Select_scalar_primitive_after_take() Assert.Equal( @"@__p_0: 9 -SELECT [t0].[EmployeeID] +SELECT [t].[EmployeeID] FROM ( - SELECT TOP(@__p_0) [e].* - FROM [Employees] AS [e] -) AS [t0]", + SELECT TOP(@__p_0) [e0].* + FROM [Employees] AS [e0] +) AS [t]", Sql); } @@ -2053,14 +2053,11 @@ public override void SelectMany_mixed() { base.SelectMany_mixed(); - Assert.Equal(3763, Sql.Replace("\r","").Replace("\n","").Length); // new-line insensitive assertion + Assert.Equal(3763, Sql.Replace("\r", "").Replace("\n", "").Length); // new-line insensitive assertion Assert.StartsWith( @"SELECT [e1].[EmployeeID], [e1].[City], [e1].[Country], [e1].[FirstName], [e1].[ReportsTo], [e1].[Title] FROM [Employees] AS [e1] -SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c] - SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c]", Sql); @@ -2073,11 +2070,11 @@ public override void SelectMany_simple_subquery() Assert.Equal( @"@__p_0: 9 -SELECT [t0].[EmployeeID], [t0].[City], [t0].[Country], [t0].[FirstName], [t0].[ReportsTo], [t0].[Title], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] +SELECT [t].[EmployeeID], [t].[City], [t].[Country], [t].[FirstName], [t].[ReportsTo], [t].[Title], [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM ( - SELECT TOP(@__p_0) [e].[EmployeeID], [e].[City], [e].[Country], [e].[FirstName], [e].[ReportsTo], [e].[Title] - FROM [Employees] AS [e] -) AS [t0] + SELECT TOP(@__p_0) [e0].[EmployeeID], [e0].[City], [e0].[Country], [e0].[FirstName], [e0].[ReportsTo], [e0].[Title] + FROM [Employees] AS [e0] +) AS [t] CROSS JOIN [Customers] AS [c]", Sql); } @@ -2296,14 +2293,14 @@ public override void Join_customers_orders_with_subquery_with_take() Assert.Equal( @"@__p_0: 5 -SELECT [c].[ContactName], [t0].[OrderID] +SELECT [c].[ContactName], [t].[OrderID] FROM [Customers] AS [c] INNER JOIN ( - SELECT TOP(@__p_0) [o2].* - FROM [Orders] AS [o2] - ORDER BY [o2].[OrderID] -) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] -WHERE [t0].[CustomerID] = 'ALFKI'", + SELECT TOP(@__p_0) [o20].* + FROM [Orders] AS [o20] + ORDER BY [o20].[OrderID] +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +WHERE [t].[CustomerID] = 'ALFKI'", Sql); } @@ -2359,15 +2356,15 @@ public override void Join_customers_orders_with_subquery_predicate_with_take() Assert.Equal( @"@__p_0: 5 -SELECT [c].[ContactName], [t0].[OrderID] +SELECT [c].[ContactName], [t].[OrderID] FROM [Customers] AS [c] INNER JOIN ( - SELECT TOP(@__p_0) [o2].* - FROM [Orders] AS [o2] - WHERE [o2].[OrderID] > 0 - ORDER BY [o2].[OrderID] -) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] -WHERE [t0].[CustomerID] = 'ALFKI'", + SELECT TOP(@__p_0) [o20].* + FROM [Orders] AS [o20] + WHERE [o20].[OrderID] > 0 + ORDER BY [o20].[OrderID] +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] +WHERE [t].[CustomerID] = 'ALFKI'", Sql); } @@ -2575,11 +2572,11 @@ public override void GroupJoin_DefaultIfEmpty3() SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] FROM ( - SELECT TOP(@__p_0) [c].* - FROM [Customers] AS [c] -) AS [t0] -LEFT JOIN [Orders] AS [o] ON [t0].[CustomerID] = [o].[CustomerID] -ORDER BY [t0].[CustomerID]", + SELECT TOP(@__p_0) [c0].* + FROM [Customers] AS [c0] +) AS [t] +LEFT JOIN [Orders] AS [o] ON [t].[CustomerID] = [o].[CustomerID] +ORDER BY [t].[CustomerID]", Sql); } @@ -2626,13 +2623,13 @@ public override void GroupJoin_simple_subquery() Assert.Equal( @"@__p_0: 4 -SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] +SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] FROM [Customers] AS [c] LEFT JOIN ( - SELECT TOP(@__p_0) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - ORDER BY [o].[OrderID] -) AS [t0] ON [c].[CustomerID] = [t0].[CustomerID] + SELECT TOP(@__p_0) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + ORDER BY [o0].[OrderID] +) AS [t] ON [c].[CustomerID] = [t].[CustomerID] ORDER BY [c].[CustomerID]", Sql); } @@ -2657,15 +2654,15 @@ public override void SelectMany_Joined_DefaultIfEmpty() @"SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate], [c].[ContactName] FROM [Customers] AS [c] CROSS APPLY ( - SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] FROM ( SELECT NULL AS [empty] - ) AS [empty] + ) AS [empty0] LEFT JOIN ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - WHERE [o].[CustomerID] = [c].[CustomerID] - ) AS [t0] ON 1 = 1 + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + WHERE [o0].[CustomerID] = [c].[CustomerID] + ) AS [t] ON 1 = 1 ) AS [t1]", Sql); } @@ -2678,15 +2675,15 @@ public override void SelectMany_Joined_DefaultIfEmpty2() @"SELECT [t1].[OrderID], [t1].[CustomerID], [t1].[EmployeeID], [t1].[OrderDate] FROM [Customers] AS [c] CROSS APPLY ( - SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] + SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate] FROM ( SELECT NULL AS [empty] - ) AS [empty] + ) AS [empty0] LEFT JOIN ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - WHERE [o].[CustomerID] = [c].[CustomerID] - ) AS [t0] ON 1 = 1 + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + WHERE [o0].[CustomerID] = [c].[CustomerID] + ) AS [t] ON 1 = 1 ) AS [t1]", Sql); } @@ -2696,13 +2693,13 @@ public override void SelectMany_Joined_Take() base.SelectMany_Joined_Take(); Assert.Equal( - @"SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate], [c].[ContactName] + @"SELECT [t].[OrderID], [t].[CustomerID], [t].[EmployeeID], [t].[OrderDate], [c].[ContactName] FROM [Customers] AS [c] CROSS APPLY ( - SELECT TOP(1000) [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] - WHERE [o].[CustomerID] = [c].[CustomerID] -) AS [t0]", + SELECT TOP(1000) [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] + WHERE [o0].[CustomerID] = [c].[CustomerID] +) AS [t]", Sql); } @@ -2713,12 +2710,12 @@ public override void Take_with_single() Assert.Equal( @"@__p_0: 1 -SELECT TOP(2) [t0].* +SELECT TOP(2) [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[CustomerID] -) AS [t0]", +) AS [t]", Sql); } @@ -2729,13 +2726,13 @@ public override void Take_with_single_select_many() Assert.Equal( @"@__p_0: 1 -SELECT TOP(2) [t0].* +SELECT TOP(2) [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], [o].[OrderID], [o].[CustomerID] AS [c0], [o].[EmployeeID], [o].[OrderDate] FROM [Customers] AS [c] CROSS JOIN [Orders] AS [o] ORDER BY [c].[CustomerID], [o].[OrderID] -) AS [t0]", +) AS [t]", Sql); } @@ -2846,12 +2843,12 @@ public override void Distinct_OrderBy() base.Distinct_OrderBy(); Assert.Equal( - @"SELECT [t0].[Country] + @"SELECT [t].[Country] FROM ( - SELECT DISTINCT [c].[Country] - FROM [Customers] AS [c] -) AS [t0] -ORDER BY [t0].[Country]", + SELECT DISTINCT [c0].[Country] + FROM [Customers] AS [c0] +) AS [t] +ORDER BY [t].[Country]", Sql); } @@ -2860,12 +2857,12 @@ public override void Distinct_OrderBy2() base.Distinct_OrderBy2(); Assert.Equal( - @"SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] + @"SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( - SELECT DISTINCT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] - FROM [Customers] AS [c] -) AS [t0] -ORDER BY [t0].[CustomerID]", + SELECT DISTINCT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] + FROM [Customers] AS [c0] +) AS [t] +ORDER BY [t].[CustomerID]", Sql); } @@ -2874,12 +2871,12 @@ public override void Distinct_OrderBy3() base.Distinct_OrderBy3(); Assert.Equal( - @"SELECT [t0].[CustomerID] + @"SELECT [t].[CustomerID] FROM ( - SELECT DISTINCT [c].[CustomerID] - FROM [Customers] AS [c] -) AS [t0] -ORDER BY [t0].[CustomerID]", + SELECT DISTINCT [c0].[CustomerID] + FROM [Customers] AS [c0] +) AS [t] +ORDER BY [t].[CustomerID]", Sql); } @@ -3049,12 +3046,12 @@ public override void Where_primitive() Assert.Equal( @"@__p_0: 9 -SELECT [t0].[EmployeeID] +SELECT [t].[EmployeeID] FROM ( - SELECT TOP(@__p_0) [e].[EmployeeID] - FROM [Employees] AS [e] -) AS [t0] -WHERE [t0].[EmployeeID] = 5", + SELECT TOP(@__p_0) [e0].[EmployeeID] + FROM [Employees] AS [e0] +) AS [t] +WHERE [t].[EmployeeID] = 5", Sql); } @@ -3743,8 +3740,8 @@ SELECT 1 FROM [Customers] AS [c] ORDER BY [c].[CustomerID] -SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] -FROM [Customers] AS [c]", +SELECT [c0].[CustomerID], [c0].[Address], [c0].[City], [c0].[CompanyName], [c0].[ContactName], [c0].[ContactTitle], [c0].[Country], [c0].[Fax], [c0].[Phone], [c0].[PostalCode], [c0].[Region] +FROM [Customers] AS [c0]", Sql); } @@ -4227,11 +4224,11 @@ public override void OfType_Select() Assert.Equal( @"SELECT TOP(1) [o.Customer].[City] FROM ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] -) AS [t0] -INNER JOIN [Customers] AS [o.Customer] ON [t0].[CustomerID] = [o.Customer].[CustomerID] -ORDER BY [t0].[OrderID]", + SELECT [o0].[OrderID], [o0].[CustomerID], [o0].[EmployeeID], [o0].[OrderDate] + FROM [Orders] AS [o0] +) AS [t] +INNER JOIN [Customers] AS [o.Customer] ON [t].[CustomerID] = [o.Customer].[CustomerID] +ORDER BY [t].[OrderID]", Sql); } @@ -4244,8 +4241,8 @@ public override void OfType_Select_OfType_Select() FROM ( SELECT [t0].[OrderID], [t0].[CustomerID], [t0].[EmployeeID], [t0].[OrderDate] FROM ( - SELECT [o].[OrderID], [o].[CustomerID], [o].[EmployeeID], [o].[OrderDate] - FROM [Orders] AS [o] + SELECT [o2].[OrderID], [o2].[CustomerID], [o2].[EmployeeID], [o2].[OrderDate] + FROM [Orders] AS [o2] ) AS [t0] ) AS [t1] INNER JOIN [Customers] AS [o.Customer] ON [t1].[CustomerID] = [o.Customer].[CustomerID] @@ -4537,17 +4534,17 @@ public override void Take_skip_null_coalesce_operator() Assert.Equal(@"@__p_0: 10 @__p_1: 5 -SELECT DISTINCT [t1].* +SELECT DISTINCT [t0].* FROM ( - SELECT [t0].* + SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY COALESCE([c].[Region], 'ZZ') - ) AS [t0] - ORDER BY COALESCE([t0].[Region], 'ZZ') + ) AS [t] + ORDER BY COALESCE([t].[Region], 'ZZ') OFFSET @__p_1 ROWS -) AS [t1]", +) AS [t0]", Sql); } @@ -4559,7 +4556,7 @@ public override void Select_take_null_coalesce_operator() SELECT TOP(@__p_0) [c].[CustomerID], [c].[CompanyName], COALESCE([c].[Region], 'ZZ') AS [Coalesce] FROM [Customers] AS [c] -ORDER BY [Coalesce]", +ORDER BY [Coalesce]", Sql); } @@ -4573,12 +4570,12 @@ public override void Select_take_skip_null_coalesce_operator() @"@__p_0: 10 @__p_1: 5 -SELECT [t0].* +SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[CompanyName], COALESCE([c].[Region], 'ZZ') AS [Coalesce] FROM [Customers] AS [c] ORDER BY [Coalesce] -) AS [t0] +) AS [t] ORDER BY [Coalesce] OFFSET @__p_1 ROWS", Sql); @@ -4594,13 +4591,13 @@ public override void Select_take_skip_null_coalesce_operator2() @"@__p_0: 10 @__p_1: 5 -SELECT [t0].* +SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[CompanyName], [c].[Region] FROM [Customers] AS [c] ORDER BY COALESCE([c].[Region], 'ZZ') -) AS [t0] -ORDER BY COALESCE([t0].[Region], 'ZZ') +) AS [t] +ORDER BY COALESCE([t].[Region], 'ZZ') OFFSET @__p_1 ROWS", Sql); } @@ -4615,13 +4612,13 @@ public override void Select_take_skip_null_coalesce_operator3() @"@__p_0: 10 @__p_1: 5 -SELECT [t0].* +SELECT [t].* FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY COALESCE([c].[Region], 'ZZ') -) AS [t0] -ORDER BY COALESCE([t0].[Region], 'ZZ') +) AS [t] +ORDER BY COALESCE([t].[Region], 'ZZ') OFFSET @__p_1 ROWS", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/RowNumberPagingTest.cs b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/RowNumberPagingTest.cs index 61c4eb555a4..94120ee9318 100644 --- a/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/RowNumberPagingTest.cs +++ b/test/Microsoft.EntityFrameworkCore.SqlServer.FunctionalTests/RowNumberPagingTest.cs @@ -30,12 +30,12 @@ public override void Skip() Assert.Equal( @"@__p_0: 5 -SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[CustomerID]) AS [__RowNumber__] FROM [Customers] AS [c] -) AS [t0] -WHERE [t0].[__RowNumber__] > @__p_0", +) AS [t] +WHERE [t].[__RowNumber__] > @__p_0", Sql); } @@ -46,12 +46,12 @@ public override void Skip_no_orderby() Assert.EndsWith( @"@__p_0: 5 -SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY @@RowCount) AS [__RowNumber__] FROM [Customers] AS [c] -) AS [t0] -WHERE [t0].[__RowNumber__] > @__p_0", +) AS [t] +WHERE [t].[__RowNumber__] > @__p_0", Sql); } @@ -63,12 +63,12 @@ public override void Skip_Take() @"@__p_0: 5 @__p_1: 10 -SELECT [t0].[CustomerID], [t0].[Address], [t0].[City], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactTitle], [t0].[Country], [t0].[Fax], [t0].[Phone], [t0].[PostalCode], [t0].[Region] +SELECT [t].[CustomerID], [t].[Address], [t].[City], [t].[CompanyName], [t].[ContactName], [t].[ContactTitle], [t].[Country], [t].[Fax], [t].[Phone], [t].[PostalCode], [t].[Region] FROM ( SELECT [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region], ROW_NUMBER() OVER(ORDER BY [c].[ContactName]) AS [__RowNumber__] FROM [Customers] AS [c] -) AS [t0] -WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1))", +) AS [t] +WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))", Sql); } @@ -80,13 +80,13 @@ public override void Join_Customers_Orders_Skip_Take() @"@__p_0: 10 @__p_1: 5 -SELECT [t0].[ContactName], [t0].[OrderID] +SELECT [t].[ContactName], [t].[OrderID] FROM ( SELECT [c].[ContactName], [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] -) AS [t0] -WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1))", +) AS [t] +WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))", Sql); } @@ -98,13 +98,13 @@ public override void Join_Customers_Orders_Projection_With_String_Concat_Skip_Ta @"@__p_0: 10 @__p_1: 5 -SELECT [t0].[c0], [t0].[OrderID] +SELECT [t].[c0], [t].[OrderID] FROM ( SELECT ([c].[ContactName] + ' ') + [c].[ContactTitle] AS [c0], [o].[OrderID], ROW_NUMBER() OVER(ORDER BY [o].[OrderID]) AS [__RowNumber__] FROM [Customers] AS [c] INNER JOIN [Orders] AS [o] ON [c].[CustomerID] = [o].[CustomerID] -) AS [t0] -WHERE ([t0].[__RowNumber__] > @__p_0) AND ([t0].[__RowNumber__] <= (@__p_0 + @__p_1))", +) AS [t] +WHERE ([t].[__RowNumber__] > @__p_0) AND ([t].[__RowNumber__] <= (@__p_0 + @__p_1))", Sql); } @@ -115,16 +115,16 @@ public override void Take_Skip() Assert.Equal(@"@__p_0: 10 @__p_1: 5 -SELECT [t1].* +SELECT [t0].* FROM ( - SELECT [t0].*, ROW_NUMBER() OVER(ORDER BY [t0].[ContactName]) AS [__RowNumber__] + SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[ContactName]) AS [__RowNumber__] FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[ContactName] - ) AS [t0] -) AS [t1] -WHERE [t1].[__RowNumber__] > @__p_1", + ) AS [t] +) AS [t0] +WHERE [t0].[__RowNumber__] > @__p_1", Sql); } @@ -136,19 +136,19 @@ public override void Take_Skip_Distinct() @"@__p_0: 10 @__p_1: 5 -SELECT DISTINCT [t1].* +SELECT DISTINCT [t0].* FROM ( - SELECT [t2].* + SELECT [t1].* FROM ( - SELECT [t0].*, ROW_NUMBER() OVER(ORDER BY [t0].[ContactName]) AS [__RowNumber__] + SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [t].[ContactName]) AS [__RowNumber__] FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY [c].[ContactName] - ) AS [t0] - ) AS [t2] - WHERE [t2].[__RowNumber__] > @__p_1 -) AS [t1]", + ) AS [t] + ) AS [t1] + WHERE [t1].[__RowNumber__] > @__p_1 +) AS [t0]", Sql); } @@ -159,19 +159,19 @@ public override void Take_skip_null_coalesce_operator() Assert.Equal(@"@__p_0: 10 @__p_1: 5 -SELECT DISTINCT [t1].* +SELECT DISTINCT [t0].* FROM ( - SELECT [t2].* + SELECT [t1].* FROM ( - SELECT [t0].*, ROW_NUMBER() OVER(ORDER BY COALESCE([t0].[Region], 'ZZ')) AS [__RowNumber__] + SELECT [t].*, ROW_NUMBER() OVER(ORDER BY COALESCE([t].[Region], 'ZZ')) AS [__RowNumber__] FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[Address], [c].[City], [c].[CompanyName], [c].[ContactName], [c].[ContactTitle], [c].[Country], [c].[Fax], [c].[Phone], [c].[PostalCode], [c].[Region] FROM [Customers] AS [c] ORDER BY COALESCE([c].[Region], 'ZZ') - ) AS [t0] - ) AS [t2] - WHERE [t2].[__RowNumber__] > @__p_1 -) AS [t1]", + ) AS [t] + ) AS [t1] + WHERE [t1].[__RowNumber__] > @__p_1 +) AS [t0]", Sql); } @@ -182,16 +182,16 @@ public override void Select_take_skip_null_coalesce_operator() Assert.Equal(@"@__p_0: 10 @__p_1: 5 -SELECT [t1].* +SELECT [t0].* FROM ( - SELECT [t0].*, ROW_NUMBER() OVER(ORDER BY [Coalesce]) AS [__RowNumber__] + SELECT [t].*, ROW_NUMBER() OVER(ORDER BY [Coalesce]) AS [__RowNumber__] FROM ( SELECT TOP(@__p_0) [c].[CustomerID], [c].[CompanyName], COALESCE([c].[Region], 'ZZ') AS [Coalesce] FROM [Customers] AS [c] ORDER BY [Coalesce] - ) AS [t0] -) AS [t1] -WHERE [t1].[__RowNumber__] > @__p_1", + ) AS [t] +) AS [t0] +WHERE [t0].[__RowNumber__] > @__p_1", Sql); } diff --git a/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/ComplexNavigationsQuerySqliteTest.cs b/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/ComplexNavigationsQuerySqliteTest.cs index d5aaaa09ce6..1ba0d777664 100644 --- a/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/ComplexNavigationsQuerySqliteTest.cs +++ b/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/ComplexNavigationsQuerySqliteTest.cs @@ -27,20 +27,21 @@ ORDER BY ""e"".""Id"" INNER JOIN ( SELECT DISTINCT ""e"".""Id"" FROM ""Level1"" AS ""e"" -) AS ""e"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e"".""Id"" -ORDER BY ""e"".""Id"", ""l"".""Id"" +) AS ""e0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e0"".""Id"" +ORDER BY ""e0"".""Id"", ""l"".""Id"" -SELECT ""l"".""Id"", ""l"".""Level2_Optional_Id"", ""l"".""Level2_Required_Id"", ""l"".""Name"", ""l"".""OneToMany_Optional_InverseId"", ""l"".""OneToMany_Optional_Self_InverseId"", ""l"".""OneToMany_Required_InverseId"", ""l"".""OneToMany_Required_Self_InverseId"", ""l"".""OneToOne_Optional_PK_InverseId"", ""l"".""OneToOne_Optional_SelfId"" -FROM ""Level3"" AS ""l"" +SELECT ""l0"".""Id"", ""l0"".""Level2_Optional_Id"", ""l0"".""Level2_Required_Id"", ""l0"".""Name"", ""l0"".""OneToMany_Optional_InverseId"", ""l0"".""OneToMany_Optional_Self_InverseId"", ""l0"".""OneToMany_Required_InverseId"", ""l0"".""OneToMany_Required_Self_InverseId"", ""l0"".""OneToOne_Optional_PK_InverseId"", ""l0"".""OneToOne_Optional_SelfId"" +FROM ""Level3"" AS ""l0"" INNER JOIN ( - SELECT DISTINCT ""e"".""Id"", ""l"".""Id"" AS ""Id0"" + SELECT DISTINCT ""e0"".""Id"", ""l"".""Id"" AS ""Id0"" FROM ""Level2"" AS ""l"" INNER JOIN ( SELECT DISTINCT ""e"".""Id"" FROM ""Level1"" AS ""e"" - ) AS ""e"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e"".""Id"" -) AS ""l0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""l0"".""Id0"" -ORDER BY ""l0"".""Id"", ""l0"".""Id0""", Sql); + ) AS ""e0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e0"".""Id"" +) AS ""l1"" ON ""l0"".""OneToMany_Optional_InverseId"" = ""l1"".""Id0"" +ORDER BY ""l1"".""Id"", ""l1"".""Id0""", + Sql); } public override void Multi_level_include_correct_PK_is_chosen_as_the_join_predicate_for_queries_that_join_same_table_multiple_times() @@ -57,38 +58,39 @@ ORDER BY ""e"".""Id"" INNER JOIN ( SELECT DISTINCT ""e"".""Id"" FROM ""Level1"" AS ""e"" -) AS ""e"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e"".""Id"" -ORDER BY ""e"".""Id"", ""l"".""Id"" +) AS ""e0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e0"".""Id"" +ORDER BY ""e0"".""Id"", ""l"".""Id"" -SELECT ""l"".""Id"", ""l"".""Level2_Optional_Id"", ""l"".""Level2_Required_Id"", ""l"".""Name"", ""l"".""OneToMany_Optional_InverseId"", ""l"".""OneToMany_Optional_Self_InverseId"", ""l"".""OneToMany_Required_InverseId"", ""l"".""OneToMany_Required_Self_InverseId"", ""l"".""OneToOne_Optional_PK_InverseId"", ""l"".""OneToOne_Optional_SelfId"", ""l1"".""Id"", ""l1"".""Level1_Optional_Id"", ""l1"".""Level1_Required_Id"", ""l1"".""Name"", ""l1"".""OneToMany_Optional_InverseId"", ""l1"".""OneToMany_Optional_Self_InverseId"", ""l1"".""OneToMany_Required_InverseId"", ""l1"".""OneToMany_Required_Self_InverseId"", ""l1"".""OneToOne_Optional_PK_InverseId"", ""l1"".""OneToOne_Optional_SelfId"" -FROM ""Level3"" AS ""l"" +SELECT ""l0"".""Id"", ""l0"".""Level2_Optional_Id"", ""l0"".""Level2_Required_Id"", ""l0"".""Name"", ""l0"".""OneToMany_Optional_InverseId"", ""l0"".""OneToMany_Optional_Self_InverseId"", ""l0"".""OneToMany_Required_InverseId"", ""l0"".""OneToMany_Required_Self_InverseId"", ""l0"".""OneToOne_Optional_PK_InverseId"", ""l0"".""OneToOne_Optional_SelfId"", ""l2"".""Id"", ""l2"".""Level1_Optional_Id"", ""l2"".""Level1_Required_Id"", ""l2"".""Name"", ""l2"".""OneToMany_Optional_InverseId"", ""l2"".""OneToMany_Optional_Self_InverseId"", ""l2"".""OneToMany_Required_InverseId"", ""l2"".""OneToMany_Required_Self_InverseId"", ""l2"".""OneToOne_Optional_PK_InverseId"", ""l2"".""OneToOne_Optional_SelfId"" +FROM ""Level3"" AS ""l0"" INNER JOIN ( - SELECT DISTINCT ""e"".""Id"", ""l"".""Id"" AS ""Id0"" + SELECT DISTINCT ""e0"".""Id"", ""l"".""Id"" AS ""Id0"" FROM ""Level2"" AS ""l"" INNER JOIN ( SELECT DISTINCT ""e"".""Id"" FROM ""Level1"" AS ""e"" - ) AS ""e"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e"".""Id"" -) AS ""l0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""l0"".""Id0"" -INNER JOIN ""Level2"" AS ""l1"" ON ""l"".""OneToMany_Required_InverseId"" = ""l1"".""Id"" -ORDER BY ""l0"".""Id"", ""l0"".""Id0"", ""l1"".""Id"" + ) AS ""e0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e0"".""Id"" +) AS ""l1"" ON ""l0"".""OneToMany_Optional_InverseId"" = ""l1"".""Id0"" +INNER JOIN ""Level2"" AS ""l2"" ON ""l0"".""OneToMany_Required_InverseId"" = ""l2"".""Id"" +ORDER BY ""l1"".""Id"", ""l1"".""Id0"", ""l2"".""Id"" -SELECT ""l"".""Id"", ""l"".""Level2_Optional_Id"", ""l"".""Level2_Required_Id"", ""l"".""Name"", ""l"".""OneToMany_Optional_InverseId"", ""l"".""OneToMany_Optional_Self_InverseId"", ""l"".""OneToMany_Required_InverseId"", ""l"".""OneToMany_Required_Self_InverseId"", ""l"".""OneToOne_Optional_PK_InverseId"", ""l"".""OneToOne_Optional_SelfId"" -FROM ""Level3"" AS ""l"" +SELECT ""l3"".""Id"", ""l3"".""Level2_Optional_Id"", ""l3"".""Level2_Required_Id"", ""l3"".""Name"", ""l3"".""OneToMany_Optional_InverseId"", ""l3"".""OneToMany_Optional_Self_InverseId"", ""l3"".""OneToMany_Required_InverseId"", ""l3"".""OneToMany_Required_Self_InverseId"", ""l3"".""OneToOne_Optional_PK_InverseId"", ""l3"".""OneToOne_Optional_SelfId"" +FROM ""Level3"" AS ""l3"" INNER JOIN ( - SELECT DISTINCT ""l0"".""Id"", ""l0"".""Id0"", ""l1"".""Id"" AS ""Id1"" - FROM ""Level3"" AS ""l"" + SELECT DISTINCT ""l1"".""Id"", ""l1"".""Id0"", ""l2"".""Id"" AS ""Id1"" + FROM ""Level3"" AS ""l0"" INNER JOIN ( - SELECT DISTINCT ""e"".""Id"", ""l"".""Id"" AS ""Id0"" + SELECT DISTINCT ""e0"".""Id"", ""l"".""Id"" AS ""Id0"" FROM ""Level2"" AS ""l"" INNER JOIN ( SELECT DISTINCT ""e"".""Id"" FROM ""Level1"" AS ""e"" - ) AS ""e"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e"".""Id"" - ) AS ""l0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""l0"".""Id0"" - INNER JOIN ""Level2"" AS ""l1"" ON ""l"".""OneToMany_Required_InverseId"" = ""l1"".""Id"" -) AS ""l1"" ON ""l"".""OneToMany_Optional_InverseId"" = ""l1"".""Id1"" -ORDER BY ""l1"".""Id"", ""l1"".""Id0"", ""l1"".""Id1""", Sql); + ) AS ""e0"" ON ""l"".""OneToMany_Optional_InverseId"" = ""e0"".""Id"" + ) AS ""l1"" ON ""l0"".""OneToMany_Optional_InverseId"" = ""l1"".""Id0"" + INNER JOIN ""Level2"" AS ""l2"" ON ""l0"".""OneToMany_Required_InverseId"" = ""l2"".""Id"" +) AS ""l20"" ON ""l3"".""OneToMany_Optional_InverseId"" = ""l20"".""Id1"" +ORDER BY ""l20"".""Id"", ""l20"".""Id0"", ""l20"".""Id1""", + Sql); } private static string Sql => TestSqlLoggerFactory.Sql; diff --git a/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/QuerySqliteTest.cs b/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/QuerySqliteTest.cs index 66a9e41cdfc..b2ab38c3636 100644 --- a/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/QuerySqliteTest.cs +++ b/test/Microsoft.EntityFrameworkCore.Sqlite.FunctionalTests/QuerySqliteTest.cs @@ -28,14 +28,14 @@ public override void Take_Skip() base.Take_Skip(); Assert.Contains( - @"SELECT ""t0"".* + @"SELECT ""t"".* FROM ( SELECT ""c"".""CustomerID"", ""c"".""Address"", ""c"".""City"", ""c"".""CompanyName"", ""c"".""ContactName"", ""c"".""ContactTitle"", ""c"".""Country"", ""c"".""Fax"", ""c"".""Phone"", ""c"".""PostalCode"", ""c"".""Region"" FROM ""Customers"" AS ""c"" ORDER BY ""c"".""ContactName"" LIMIT @__p_0 -) AS ""t0"" -ORDER BY ""t0"".""ContactName"" +) AS ""t"" +ORDER BY ""t"".""ContactName"" LIMIT -1 OFFSET @__p_1", Sql); }