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. // workaround.
// Should be kept in sync with the base class. // 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; IDisposable? subQueryIndent = null;
if (selectExpression.Alias != null) if (selectExpression.Alias != null)
@ -88,202 +80,212 @@ namespace EntityFrameworkCore.Jet.Query.Sql.Internal
subQueryIndent = Sql.Indent(); subQueryIndent = Sql.Indent();
} }
Sql.Append("SELECT "); if (!TryGenerateWithoutWrappingSelect(selectExpression))
if (selectExpression.IsDistinct)
{ {
Sql.Append("DISTINCT ");
}
if (selectExpression.Tags.Contains("DeepSkip")) Sql.Append("SELECT ");
{
} if (selectExpression.IsDistinct)
else {
{ Sql.Append("DISTINCT ");
GenerateTop(selectExpression); }
}
if (selectExpression.Projection.Any())
{
GenerateList(selectExpression.Projection, e => Visit(e));
}
else
{
Sql.Append("1");
}
List<ColumnExpression> colexp = new List<ColumnExpression>(); if (selectExpression.Tags.Contains("DeepSkip"))
// 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; }
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 || List<ColumnExpression> colexp = new List<ColumnExpression>();
tableExpression is OuterApplyExpression; // 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 || var isApplyExpression = tableExpression is CrossApplyExpression ||
tableExpression is CrossApplyExpression; tableExpression is OuterApplyExpression;
if (isApplyExpression) var isCrossExpression = tableExpression is CrossJoinExpression ||
{ tableExpression is CrossApplyExpression;
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.");
}
if (index > 0) if (isApplyExpression)
{
if (isCrossExpression)
{ {
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.");
else if (index >= maxTablesWithoutBrackets)
{
Sql.Append(")");
} }
Sql.AppendLine(); if (index > 0)
}
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 (col.Table == selectExpression.Tables[0]) if (isCrossExpression)
{ {
refrencesfirsttable = true; Sql.Append(",");
break; }
else if (index >= maxTablesWithoutBrackets)
{
Sql.Append(")");
} }
}
if (refrencesfirsttable) Sql.AppendLine();
{
Visit(tableExpression);
continue;
} }
else
{ List<ColumnExpression> tempcolexp;
colexp.AddRange(tempcolexp); if (tableExpression is InnerJoinExpression expression)
}
/*if (expression.JoinPredicate is SqlBinaryExpression { Left: ColumnExpression left, Right: ColumnExpression right })
{ {
var lt = left.Table == selectExpression.Tables[0]; SqlBinaryExpression? binaryJoin = expression.JoinPredicate as SqlBinaryExpression;
var rt = right.Table == selectExpression.Tables[0]; tempcolexp = ExtractColumnExpressions(binaryJoin!);
if (lt || rt) bool refrencesfirsttable = false;
foreach (ColumnExpression col in tempcolexp)
{
if (col.Table == selectExpression.Tables[0])
{
refrencesfirsttable = true;
break;
}
}
if (refrencesfirsttable)
{ {
Visit(tableExpression); Visit(tableExpression);
continue; continue;
} }
else else
{ {
colexp.Add(left); colexp.AddRange(tempcolexp);
colexp.Add(right);
} }
}*/
Sql.Append("LEFT JOIN "); /*if (expression.JoinPredicate is SqlBinaryExpression { Left: ColumnExpression left, Right: ColumnExpression right })
Visit(expression.Table); {
Sql.Append(" ON "); var lt = left.Table == selectExpression.Tables[0];
Visit(expression.JoinPredicate); var rt = right.Table == selectExpression.Tables[0];
} if (lt || rt)
else {
{ Visit(tableExpression);
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
else
{
GeneratePseudoFromClause();
}
if (selectExpression.Predicate != null || colexp.Count > 0)
{
Sql.AppendLine()
.Append("WHERE ");
if (selectExpression.Predicate != null)
{ {
if (colexp.Count > 0) Sql.Append("("); GeneratePseudoFromClause();
Visit(selectExpression.Predicate);
if (colexp.Count > 0) Sql.Append(")");
} }
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) if (selectExpression.Predicate != null)
{
int ct = 0;
foreach (var exp in colexp)
{ {
if (!string.IsNullOrEmpty(exp.TableAlias)) if (colexp.Count > 0) Sql.Append("(");
{ Visit(selectExpression.Predicate);
Sql.Append($"`{exp.TableAlias}`."); if (colexp.Count > 0) Sql.Append(")");
} }
Sql.Append($"`{exp.Name}` IS NOT NULL");
if (ct < colexp.Count - 1) if (selectExpression.Predicate != null && colexp.Count > 0)
{
Sql.Append(" AND (");
}
if (colexp.Count > 0)
{
int ct = 0;
foreach (var exp in colexp)
{ {
ct++; if (!string.IsNullOrEmpty(exp.TableAlias))
Sql.Append(" AND "); {
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) if (selectExpression.Having != null)
{ {
Sql.AppendLine() Sql.AppendLine()
.Append("GROUP BY "); .Append("HAVING ");
GenerateList(selectExpression.GroupBy, e => Visit(e)); Visit(selectExpression.Having);
} }
if (selectExpression.Having != null) GenerateOrderings(selectExpression);
{ GenerateLimitOffset(selectExpression);
Sql.AppendLine()
.Append("HAVING ");
Visit(selectExpression.Having);
} }
GenerateOrderings(selectExpression);
GenerateLimitOffset(selectExpression);
if (selectExpression.Alias != null) if (selectExpression.Alias != null)
{ {
subQueryIndent!.Dispose(); subQueryIndent!.Dispose();
Sql.AppendLine() Sql.AppendLine()
.Append(")" + AliasSeparator + _sqlGenerationHelper.DelimitIdentifier(selectExpression.Alias)); .Append(")")
.Append(AliasSeparator)
.Append(_sqlGenerationHelper.DelimitIdentifier(selectExpression.Alias));
} }
return selectExpression; return selectExpression;

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

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

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

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

Loading…
Cancel
Save