Fix generating sets (union, intersect). The code was originally executing and returning before it could handle adding the SQL for the Alias in (including wrapping the section in brackets). This realigns with how the parent VisitSelect works

pull/144/head
Christopher Jolly 2 years ago
parent d78256f53d
commit 2281916b88

@ -72,14 +72,6 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal
// workaround.
// Should be kept in sync with the base class.
if (IsNonComposedSetOperation(selectExpression))
{
// Naked set operation
GenerateSetOperation((SetOperationBase)selectExpression.Tables[0]);
return selectExpression;
}
IDisposable? subQueryIndent = null;
if (selectExpression.Alias != null)
@ -88,202 +80,212 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal
subQueryIndent = Sql.Indent();
}
Sql.Append("SELECT ");
if (selectExpression.IsDistinct)
if (!TryGenerateWithoutWrappingSelect(selectExpression))
{
Sql.Append("DISTINCT ");
}
if (selectExpression.Tags.Contains("DeepSkip"))
{
Sql.Append("SELECT ");
}
else
{
GenerateTop(selectExpression);
}
if (selectExpression.Projection.Any())
{
GenerateList(selectExpression.Projection, e => Visit(e));
}
else
{
Sql.Append("1");
}
if (selectExpression.IsDistinct)
{
Sql.Append("DISTINCT ");
}
List<ColumnExpression> colexp = new List<ColumnExpression>();
// Implement Jet's non-standard JOIN syntax and DUAL table workaround.
// TODO: This does not properly handle all cases (especially when cross joins are involved).
if (selectExpression.Tables.Any())
{
Sql.AppendLine()
.Append("FROM ");
if (selectExpression.Tags.Contains("DeepSkip"))
{
const int maxTablesWithoutBrackets = 2;
}
else
{
GenerateTop(selectExpression);
}
Sql.Append(
new string(
'(',
Math.Max(
0,
selectExpression
.Tables
.Count(t => !(t is CrossJoinExpression || t is CrossApplyExpression)) -
maxTablesWithoutBrackets)));
for (var index = 0; index < selectExpression.Tables.Count; index++)
if (selectExpression.Projection.Any())
{
var tableExpression = selectExpression.Tables[index];
GenerateList(selectExpression.Projection, e => Visit(e));
}
else
{
Sql.Append("1");
}
var isApplyExpression = tableExpression is CrossApplyExpression ||
tableExpression is OuterApplyExpression;
List<ColumnExpression> colexp = new List<ColumnExpression>();
// Implement Jet's non-standard JOIN syntax and DUAL table workaround.
// TODO: This does not properly handle all cases (especially when cross joins are involved).
if (selectExpression.Tables.Any())
{
Sql.AppendLine()
.Append("FROM ");
const int maxTablesWithoutBrackets = 2;
Sql.Append(
new string(
'(',
Math.Max(
0,
selectExpression
.Tables
.Count(t => !(t is CrossJoinExpression || t is CrossApplyExpression)) -
maxTablesWithoutBrackets)));
for (var index = 0; index < selectExpression.Tables.Count; index++)
{
var tableExpression = selectExpression.Tables[index];
var isCrossExpression = tableExpression is CrossJoinExpression ||
tableExpression is CrossApplyExpression;
var isApplyExpression = tableExpression is CrossApplyExpression ||
tableExpression is OuterApplyExpression;
if (isApplyExpression)
{
throw new InvalidOperationException(
"Jet does not support APPLY statements. Switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync() if needed.");
}
var isCrossExpression = tableExpression is CrossJoinExpression ||
tableExpression is CrossApplyExpression;
if (index > 0)
{
if (isCrossExpression)
if (isApplyExpression)
{
Sql.Append(",");
}
else if (index >= maxTablesWithoutBrackets)
{
Sql.Append(")");
throw new InvalidOperationException(
"Jet does not support APPLY statements. Switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync() if needed.");
}
Sql.AppendLine();
}
List<ColumnExpression> tempcolexp;
if (tableExpression is InnerJoinExpression expression)
{
SqlBinaryExpression? binaryJoin = expression.JoinPredicate as SqlBinaryExpression;
tempcolexp = ExtractColumnExpressions(binaryJoin!);
bool refrencesfirsttable = false;
foreach (ColumnExpression col in tempcolexp)
if (index > 0)
{
if (col.Table == selectExpression.Tables[0])
if (isCrossExpression)
{
refrencesfirsttable = true;
break;
Sql.Append(",");
}
else if (index >= maxTablesWithoutBrackets)
{
Sql.Append(")");
}
}
if (refrencesfirsttable)
{
Visit(tableExpression);
continue;
Sql.AppendLine();
}
else
{
colexp.AddRange(tempcolexp);
}
/*if (expression.JoinPredicate is SqlBinaryExpression { Left: ColumnExpression left, Right: ColumnExpression right })
List<ColumnExpression> tempcolexp;
if (tableExpression is InnerJoinExpression expression)
{
var lt = left.Table == selectExpression.Tables[0];
var rt = right.Table == selectExpression.Tables[0];
if (lt || rt)
SqlBinaryExpression? binaryJoin = expression.JoinPredicate as SqlBinaryExpression;
tempcolexp = ExtractColumnExpressions(binaryJoin!);
bool refrencesfirsttable = false;
foreach (ColumnExpression col in tempcolexp)
{
if (col.Table == selectExpression.Tables[0])
{
refrencesfirsttable = true;
break;
}
}
if (refrencesfirsttable)
{
Visit(tableExpression);
continue;
}
else
{
colexp.Add(left);
colexp.Add(right);
colexp.AddRange(tempcolexp);
}
}*/
Sql.Append("LEFT JOIN ");
Visit(expression.Table);
Sql.Append(" ON ");
Visit(expression.JoinPredicate);
}
else
{
Visit(tableExpression);
/*if (expression.JoinPredicate is SqlBinaryExpression { Left: ColumnExpression left, Right: ColumnExpression right })
{
var lt = left.Table == selectExpression.Tables[0];
var rt = right.Table == selectExpression.Tables[0];
if (lt || rt)
{
Visit(tableExpression);
continue;
}
else
{
colexp.Add(left);
colexp.Add(right);
}
}*/
Sql.Append("LEFT JOIN ");
Visit(expression.Table);
Sql.Append(" ON ");
Visit(expression.JoinPredicate);
}
else
{
Visit(tableExpression);
}
}
}
}
else
{
GeneratePseudoFromClause();
}
if (selectExpression.Predicate != null || colexp.Count > 0)
{
Sql.AppendLine()
.Append("WHERE ");
if (selectExpression.Predicate != null)
else
{
if (colexp.Count > 0) Sql.Append("(");
Visit(selectExpression.Predicate);
if (colexp.Count > 0) Sql.Append(")");
GeneratePseudoFromClause();
}
if (selectExpression.Predicate != null && colexp.Count > 0)
if (selectExpression.Predicate != null || colexp.Count > 0)
{
Sql.Append(" AND (");
}
Sql.AppendLine()
.Append("WHERE ");
if (colexp.Count > 0)
{
int ct = 0;
foreach (var exp in colexp)
if (selectExpression.Predicate != null)
{
if (!string.IsNullOrEmpty(exp.TableAlias))
{
Sql.Append($"`{exp.TableAlias}`.");
}
Sql.Append($"`{exp.Name}` IS NOT NULL");
if (ct < colexp.Count - 1)
if (colexp.Count > 0) Sql.Append("(");
Visit(selectExpression.Predicate);
if (colexp.Count > 0) Sql.Append(")");
}
if (selectExpression.Predicate != null && colexp.Count > 0)
{
Sql.Append(" AND (");
}
if (colexp.Count > 0)
{
int ct = 0;
foreach (var exp in colexp)
{
ct++;
Sql.Append(" AND ");
if (!string.IsNullOrEmpty(exp.TableAlias))
{
Sql.Append($"`{exp.TableAlias}`.");
}
Sql.Append($"`{exp.Name}` IS NOT NULL");
if (ct < colexp.Count - 1)
{
ct++;
Sql.Append(" AND ");
}
}
}
if (selectExpression.Predicate != null && colexp.Count > 0)
{
Sql.Append(")");
}
}
if (selectExpression.Predicate != null && colexp.Count > 0)
if (selectExpression.GroupBy.Count > 0)
{
Sql.Append(")");
Sql.AppendLine()
.Append("GROUP BY ");
GenerateList(selectExpression.GroupBy, e => Visit(e));
}
}
if (selectExpression.GroupBy.Count > 0)
{
Sql.AppendLine()
.Append("GROUP BY ");
if (selectExpression.Having != null)
{
Sql.AppendLine()
.Append("HAVING ");
GenerateList(selectExpression.GroupBy, e => Visit(e));
}
Visit(selectExpression.Having);
}
if (selectExpression.Having != null)
{
Sql.AppendLine()
.Append("HAVING ");
GenerateOrderings(selectExpression);
GenerateLimitOffset(selectExpression);
Visit(selectExpression.Having);
}
GenerateOrderings(selectExpression);
GenerateLimitOffset(selectExpression);
if (selectExpression.Alias != null)
{
subQueryIndent!.Dispose();
Sql.AppendLine()
.Append(")" + AliasSeparator + _sqlGenerationHelper.DelimitIdentifier(selectExpression.Alias));
.Append(")")
.Append(AliasSeparator)
.Append(_sqlGenerationHelper.DelimitIdentifier(selectExpression.Alias));
}
return selectExpression;

@ -519,15 +519,15 @@ WHERE (`d`.`Id` IS NOT NULL OR `c`.`Id` IS NOT NULL) AND (`a`.`Species` LIKE 'F%
AssertSql(
"""
SELECT [t].[Id], [t].[Species], [t].[Name], [t].[EdcuationLevel], [t].[FavoriteToy], [t].[Discriminator]
SELECT `t`.`Id`, `t`.`Species`, `t`.`Name`, `t`.`EdcuationLevel`, `t`.`FavoriteToy`, `t`.`Discriminator`
FROM (
SELECT [c].[Id], [c].[Species], [c].[Name], [c].[EdcuationLevel], NULL AS [FavoriteToy], N'Cat' AS [Discriminator]
FROM [Cats] AS [c]
SELECT `c`.`Id`, `c`.`Species`, `c`.`Name`, `c`.`EdcuationLevel`, NULL AS `FavoriteToy`, 'Cat' AS `Discriminator`
FROM `Cats` AS `c`
UNION ALL
SELECT [d].[Id], [d].[Species], [d].[Name], NULL AS [EdcuationLevel], [d].[FavoriteToy], N'Dog' AS [Discriminator]
FROM [Dogs] AS [d]
) AS [t]
WHERE ([t].[Species] IS NOT NULL) AND ([t].[Species] LIKE N'F%')
SELECT `d`.`Id`, `d`.`Species`, `d`.`Name`, NULL AS `EdcuationLevel`, `d`.`FavoriteToy`, 'Dog' AS `Discriminator`
FROM `Dogs` AS `d`
) AS `t`
WHERE `t`.`Species` LIKE 'F%'
""");
}

@ -197,25 +197,25 @@ INNER JOIN (
AssertSql(
"""
SELECT MIN([t0].[Id])
FROM [EntityThrees] AS [e]
SELECT MIN(`t0`.`Id`)
FROM `EntityThrees` AS `e`
INNER JOIN (
SELECT [t].[Id], [e0].[ThreeSkipSharedId]
FROM [EntityRootEntityThree] AS [e0]
SELECT `t`.`Id`, `e0`.`ThreeSkipSharedId`
FROM `EntityRootEntityThree` AS `e0`
INNER JOIN (
SELECT [r].[Id]
FROM [Roots] AS [r]
SELECT `r`.`Id`
FROM `Roots` AS `r`
UNION ALL
SELECT [b].[Id]
FROM [Branches] AS [b]
SELECT `b`.`Id`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id]
FROM [Leaves] AS [l]
SELECT `l`.`Id`
FROM `Leaves` AS `l`
UNION ALL
SELECT [l0].[Id]
FROM [Leaf2s] AS [l0]
) AS [t] ON [e0].[RootSkipSharedId] = [t].[Id]
) AS [t0] ON [e].[Id] = [t0].[ThreeSkipSharedId]
SELECT `l0`.`Id`
FROM `Leaf2s` AS `l0`
) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id`
) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId`
""");
}
@ -225,25 +225,25 @@ INNER JOIN (
AssertSql(
"""
SELECT COALESCE(SUM([t0].[Key1]), 0)
SELECT IIF(SUM(`t0`.`Key1`) IS NULL, 0, SUM(`t0`.`Key1`))
FROM (
SELECT [r].[Id]
FROM [Roots] AS [r]
SELECT `r`.`Id`
FROM `Roots` AS `r`
UNION ALL
SELECT [b].[Id]
FROM [Branches] AS [b]
SELECT `b`.`Id`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id]
FROM [Leaves] AS [l]
SELECT `l`.`Id`
FROM `Leaves` AS `l`
UNION ALL
SELECT [l0].[Id]
FROM [Leaf2s] AS [l0]
) AS [t]
SELECT `l0`.`Id`
FROM `Leaf2s` AS `l0`
) AS `t`
INNER JOIN (
SELECT [e0].[Key1], [e].[RootSkipSharedId]
FROM [EntityCompositeKeyEntityRoot] AS [e]
INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3]
) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId]
SELECT `e0`.`Key1`, `e`.`RootSkipSharedId`
FROM `EntityCompositeKeyEntityRoot` AS `e`
INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3`
) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId`
""");
}
@ -488,25 +488,25 @@ ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2]
AssertSql(
"""
SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId]
SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`
FROM (
SELECT [r].[Id]
FROM [Roots] AS [r]
SELECT `r`.`Id`
FROM `Roots` AS `r`
UNION ALL
SELECT [b].[Id]
FROM [Branches] AS [b]
SELECT `b`.`Id`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id]
FROM [Leaves] AS [l]
SELECT `l`.`Id`
FROM `Leaves` AS `l`
UNION ALL
SELECT [l0].[Id]
FROM [Leaf2s] AS [l0]
) AS [t]
SELECT `l0`.`Id`
FROM `Leaf2s` AS `l0`
) AS `t`
INNER JOIN (
SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [e].[RootSkipSharedId]
FROM [EntityRootEntityThree] AS [e]
INNER JOIN [EntityThrees] AS [e0] ON [e].[ThreeSkipSharedId] = [e0].[Id]
) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId]
SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`
FROM `EntityRootEntityThree` AS `e`
INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`
) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId`
""");
}
@ -2065,14 +2065,14 @@ FROM `Leaves` AS `l`
AssertSql(
"""
SELECT [t].[Id], [t].[Name], [t].[Number], [t].[IsGreen], [t].[Discriminator]
SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`
FROM (
SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [IsGreen], N'EntityBranch' AS [Discriminator]
FROM [Branches] AS [b]
SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, NULL AS `IsGreen`, 'EntityBranch' AS `Discriminator`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id], [l].[Name], [l].[Number], [l].[IsGreen], N'EntityLeaf' AS [Discriminator]
FROM [Leaves] AS [l]
) AS [t]
SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator`
FROM `Leaves` AS `l`
) AS `t`
WHERE 0 = 1
""");
}
@ -2329,22 +2329,22 @@ ORDER BY [u].[Key1], [u0].[Key1], [u].[Key2], [u0].[Key2]
AssertSql(
"""
SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId]
SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`
FROM (
SELECT [u1].[Id]
FROM [UnidirectionalRoots] AS [u1]
SELECT `u1`.`Id`
FROM `UnidirectionalRoots` AS `u1`
UNION ALL
SELECT [u2].[Id]
FROM [UnidirectionalBranches] AS [u2]
SELECT `u2`.`Id`
FROM `UnidirectionalBranches` AS `u2`
UNION ALL
SELECT [u3].[Id]
FROM [UnidirectionalLeaves] AS [u3]
) AS [t]
SELECT `u3`.`Id`
FROM `UnidirectionalLeaves` AS `u3`
) AS `t`
INNER JOIN (
SELECT [u0].[Id], [u0].[CollectionInverseId], [u0].[Name], [u0].[ReferenceInverseId], [u].[UnidirectionalEntityRootId]
FROM [UnidirectionalEntityRootUnidirectionalEntityThree] AS [u]
INNER JOIN [UnidirectionalEntityThrees] AS [u0] ON [u].[ThreeSkipSharedId] = [u0].[Id]
) AS [t0] ON [t].[Id] = [t0].[UnidirectionalEntityRootId]
SELECT `u0`.`Id`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId`, `u`.`UnidirectionalEntityRootId`
FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u`
INNER JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`ThreeSkipSharedId` = `u0`.`Id`
) AS `t0` ON `t`.`Id` = `t0`.`UnidirectionalEntityRootId`
""");
}
@ -2790,14 +2790,14 @@ FROM `UnidirectionalLeaves` AS `u`
AssertSql(
"""
SELECT [t].[Id], [t].[Name], [t].[Number], [t].[IsGreen], [t].[Discriminator]
SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`
FROM (
SELECT [u].[Id], [u].[Name], [u].[Number], NULL AS [IsGreen], N'UnidirectionalEntityBranch' AS [Discriminator]
FROM [UnidirectionalBranches] AS [u]
SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, NULL AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator`
FROM `UnidirectionalBranches` AS `u`
UNION ALL
SELECT [u0].[Id], [u0].[Name], [u0].[Number], [u0].[IsGreen], N'UnidirectionalEntityLeaf' AS [Discriminator]
FROM [UnidirectionalLeaves] AS [u0]
) AS [t]
SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`Number`, `u0`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator`
FROM `UnidirectionalLeaves` AS `u0`
) AS `t`
WHERE 0 = 1
""");
}

@ -197,25 +197,25 @@ INNER JOIN (
AssertSql(
"""
SELECT MIN([t0].[Id])
FROM [EntityThrees] AS [e]
SELECT MIN(`t0`.`Id`)
FROM `EntityThrees` AS `e`
INNER JOIN (
SELECT [t].[Id], [e0].[ThreeSkipSharedId]
FROM [EntityRootEntityThree] AS [e0]
SELECT `t`.`Id`, `e0`.`ThreeSkipSharedId`
FROM `EntityRootEntityThree` AS `e0`
INNER JOIN (
SELECT [r].[Id]
FROM [Roots] AS [r]
SELECT `r`.`Id`
FROM `Roots` AS `r`
UNION ALL
SELECT [b].[Id]
FROM [Branches] AS [b]
SELECT `b`.`Id`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id]
FROM [Leaves] AS [l]
SELECT `l`.`Id`
FROM `Leaves` AS `l`
UNION ALL
SELECT [l0].[Id]
FROM [Leaf2s] AS [l0]
) AS [t] ON [e0].[RootSkipSharedId] = [t].[Id]
) AS [t0] ON [e].[Id] = [t0].[ThreeSkipSharedId]
SELECT `l0`.`Id`
FROM `Leaf2s` AS `l0`
) AS `t` ON `e0`.`RootSkipSharedId` = `t`.`Id`
) AS `t0` ON `e`.`Id` = `t0`.`ThreeSkipSharedId`
""");
}
@ -225,25 +225,25 @@ INNER JOIN (
AssertSql(
"""
SELECT COALESCE(SUM([t0].[Key1]), 0)
SELECT IIF(SUM(`t0`.`Key1`) IS NULL, 0, SUM(`t0`.`Key1`))
FROM (
SELECT [r].[Id]
FROM [Roots] AS [r]
SELECT `r`.`Id`
FROM `Roots` AS `r`
UNION ALL
SELECT [b].[Id]
FROM [Branches] AS [b]
SELECT `b`.`Id`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id]
FROM [Leaves] AS [l]
SELECT `l`.`Id`
FROM `Leaves` AS `l`
UNION ALL
SELECT [l0].[Id]
FROM [Leaf2s] AS [l0]
) AS [t]
SELECT `l0`.`Id`
FROM `Leaf2s` AS `l0`
) AS `t`
INNER JOIN (
SELECT [e0].[Key1], [e].[RootSkipSharedId]
FROM [EntityCompositeKeyEntityRoot] AS [e]
INNER JOIN [EntityCompositeKeys] AS [e0] ON [e].[CompositeKeySkipSharedKey1] = [e0].[Key1] AND [e].[CompositeKeySkipSharedKey2] = [e0].[Key2] AND [e].[CompositeKeySkipSharedKey3] = [e0].[Key3]
) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId]
SELECT `e0`.`Key1`, `e`.`RootSkipSharedId`
FROM `EntityCompositeKeyEntityRoot` AS `e`
INNER JOIN `EntityCompositeKeys` AS `e0` ON `e`.`CompositeKeySkipSharedKey1` = `e0`.`Key1` AND `e`.`CompositeKeySkipSharedKey2` = `e0`.`Key2` AND `e`.`CompositeKeySkipSharedKey3` = `e0`.`Key3`
) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId`
""");
}
@ -488,25 +488,25 @@ ORDER BY [e].[Key1], [e0].[Key1], [e].[Key2], [e0].[Key2]
AssertSql(
"""
SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId]
SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`
FROM (
SELECT [r].[Id]
FROM [Roots] AS [r]
SELECT `r`.`Id`
FROM `Roots` AS `r`
UNION ALL
SELECT [b].[Id]
FROM [Branches] AS [b]
SELECT `b`.`Id`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id]
FROM [Leaves] AS [l]
SELECT `l`.`Id`
FROM `Leaves` AS `l`
UNION ALL
SELECT [l0].[Id]
FROM [Leaf2s] AS [l0]
) AS [t]
SELECT `l0`.`Id`
FROM `Leaf2s` AS `l0`
) AS `t`
INNER JOIN (
SELECT [e0].[Id], [e0].[CollectionInverseId], [e0].[Name], [e0].[ReferenceInverseId], [e].[RootSkipSharedId]
FROM [EntityRootEntityThree] AS [e]
INNER JOIN [EntityThrees] AS [e0] ON [e].[ThreeSkipSharedId] = [e0].[Id]
) AS [t0] ON [t].[Id] = [t0].[RootSkipSharedId]
SELECT `e0`.`Id`, `e0`.`CollectionInverseId`, `e0`.`Name`, `e0`.`ReferenceInverseId`, `e`.`RootSkipSharedId`
FROM `EntityRootEntityThree` AS `e`
INNER JOIN `EntityThrees` AS `e0` ON `e`.`ThreeSkipSharedId` = `e0`.`Id`
) AS `t0` ON `t`.`Id` = `t0`.`RootSkipSharedId`
""");
}
@ -2073,14 +2073,14 @@ FROM `Leaves` AS `l`
AssertSql(
"""
SELECT [t].[Id], [t].[Name], [t].[Number], [t].[IsGreen], [t].[Discriminator]
SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`
FROM (
SELECT [b].[Id], [b].[Name], [b].[Number], NULL AS [IsGreen], N'EntityBranch' AS [Discriminator]
FROM [Branches] AS [b]
SELECT `b`.`Id`, `b`.`Name`, `b`.`Number`, NULL AS `IsGreen`, 'EntityBranch' AS `Discriminator`
FROM `Branches` AS `b`
UNION ALL
SELECT [l].[Id], [l].[Name], [l].[Number], [l].[IsGreen], N'EntityLeaf' AS [Discriminator]
FROM [Leaves] AS [l]
) AS [t]
SELECT `l`.`Id`, `l`.`Name`, `l`.`Number`, `l`.`IsGreen`, 'EntityLeaf' AS `Discriminator`
FROM `Leaves` AS `l`
) AS `t`
WHERE 0 = 1
""");
}
@ -2330,22 +2330,22 @@ ORDER BY [u].[Key1], [u0].[Key1], [u].[Key2], [u0].[Key2]
AssertSql(
"""
SELECT [t0].[Id], [t0].[CollectionInverseId], [t0].[Name], [t0].[ReferenceInverseId]
SELECT `t0`.`Id`, `t0`.`CollectionInverseId`, `t0`.`Name`, `t0`.`ReferenceInverseId`
FROM (
SELECT [u1].[Id]
FROM [UnidirectionalRoots] AS [u1]
SELECT `u1`.`Id`
FROM `UnidirectionalRoots` AS `u1`
UNION ALL
SELECT [u2].[Id]
FROM [UnidirectionalBranches] AS [u2]
SELECT `u2`.`Id`
FROM `UnidirectionalBranches` AS `u2`
UNION ALL
SELECT [u3].[Id]
FROM [UnidirectionalLeaves] AS [u3]
) AS [t]
SELECT `u3`.`Id`
FROM `UnidirectionalLeaves` AS `u3`
) AS `t`
INNER JOIN (
SELECT [u0].[Id], [u0].[CollectionInverseId], [u0].[Name], [u0].[ReferenceInverseId], [u].[UnidirectionalEntityRootId]
FROM [UnidirectionalEntityRootUnidirectionalEntityThree] AS [u]
INNER JOIN [UnidirectionalEntityThrees] AS [u0] ON [u].[ThreeSkipSharedId] = [u0].[Id]
) AS [t0] ON [t].[Id] = [t0].[UnidirectionalEntityRootId]
SELECT `u0`.`Id`, `u0`.`CollectionInverseId`, `u0`.`Name`, `u0`.`ReferenceInverseId`, `u`.`UnidirectionalEntityRootId`
FROM `UnidirectionalEntityRootUnidirectionalEntityThree` AS `u`
INNER JOIN `UnidirectionalEntityThrees` AS `u0` ON `u`.`ThreeSkipSharedId` = `u0`.`Id`
) AS `t0` ON `t`.`Id` = `t0`.`UnidirectionalEntityRootId`
""");
}
@ -2814,14 +2814,14 @@ FROM `UnidirectionalLeaves` AS `u`
AssertSql(
"""
SELECT [t].[Id], [t].[Name], [t].[Number], [t].[IsGreen], [t].[Discriminator]
SELECT `t`.`Id`, `t`.`Name`, `t`.`Number`, `t`.`IsGreen`, `t`.`Discriminator`
FROM (
SELECT [u].[Id], [u].[Name], [u].[Number], NULL AS [IsGreen], N'UnidirectionalEntityBranch' AS [Discriminator]
FROM [UnidirectionalBranches] AS [u]
SELECT `u`.`Id`, `u`.`Name`, `u`.`Number`, NULL AS `IsGreen`, 'UnidirectionalEntityBranch' AS `Discriminator`
FROM `UnidirectionalBranches` AS `u`
UNION ALL
SELECT [u0].[Id], [u0].[Name], [u0].[Number], [u0].[IsGreen], N'UnidirectionalEntityLeaf' AS [Discriminator]
FROM [UnidirectionalLeaves] AS [u0]
) AS [t]
SELECT `u0`.`Id`, `u0`.`Name`, `u0`.`Number`, `u0`.`IsGreen`, 'UnidirectionalEntityLeaf' AS `Discriminator`
FROM `UnidirectionalLeaves` AS `u0`
) AS `t`
WHERE 0 = 1
""");
}

@ -46,13 +46,13 @@ public class TPTGearsOfWarQueryJetFixture : TPTGearsOfWarQueryRelationalFixture
mission.Timeline = mission.Timeline.AddYears(100);
}
*/
foreach (var gear in data.Gears)
/*foreach (var gear in data.Gears)
{
if (gear.LeaderSquadId != 0) continue;
gear.LeaderSquadId = 1;
gear.LeaderNickname = "Marcus";
((Officer)gear).Reports.Add(gear);
}
}*/
return data;
}

Loading…
Cancel
Save