Fix type mapping for Time of Day methods which needs to be TimeSpan

pull/257/head
Christopher Jolly 1 year ago
parent 1e091fdefd
commit 74c7e3f527

@ -109,7 +109,7 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
false, false,
new[] { false }, new[] { false },
returnType)), returnType)),
nameof(DateTime.TimeOfDay) => _sqlExpressionFactory.NullChecked( nameof(DateTime.TimeOfDay) => TimeSpanNullChecked(
instance!, instance!,
_sqlExpressionFactory.Function( _sqlExpressionFactory.Function(
"TIMEVALUE", "TIMEVALUE",
@ -135,8 +135,22 @@ namespace EntityFrameworkCore.Jet.Query.ExpressionTranslators.Internal
new CaseWhenClause( new CaseWhenClause(
_sqlExpressionFactory.IsNull(checkSqlExpression), _sqlExpressionFactory.IsNull(checkSqlExpression),
_sqlExpressionFactory.Constant( _sqlExpressionFactory.Constant(
null,typeof(string), null,typeof(DateTime),
checkSqlExpression.TypeMapping)) notNullSqlExpression.TypeMapping))
},
notNullSqlExpression);
public CaseExpression TimeSpanNullChecked(
SqlExpression checkSqlExpression,
SqlExpression notNullSqlExpression)
=> (CaseExpression)_sqlExpressionFactory.Case(
new[]
{
new CaseWhenClause(
_sqlExpressionFactory.IsNull(checkSqlExpression),
_sqlExpressionFactory.Constant(
null,typeof(TimeSpan),
notNullSqlExpression.TypeMapping))
}, },
notNullSqlExpression); notNullSqlExpression);
} }

@ -5951,11 +5951,9 @@ ORDER BY `g`.`Nickname`, `m`.`Id`
await base.Time_of_day_datetimeoffset(isAsync); await base.Time_of_day_datetimeoffset(isAsync);
AssertSql( AssertSql(
""" """
SELECT ('HasSoulPatch ' & (`g`.`HasSoulPatch` & '')) & ' HasSoulPatch', ('Rank ' & (`g`.`Rank` & '')) & ' Rank', ('SquadId ' & (`g`.`SquadId` & '')) & ' SquadId', ('Rating ' & IIF((`m`.`Rating` & '') IS NULL, '', (`m`.`Rating` & ''))) & ' Rating', `m`.`Id`, `m`.`CodeName`, `m`.`Rating` SELECT TIMEVALUE(`m`.`Timeline`)
FROM `Gears` AS `g`, FROM `Missions` AS `m`
`Missions` AS `m`
ORDER BY `g`.`Nickname`, `m`.`Id`
"""); """);
} }
@ -7515,7 +7513,7 @@ ORDER BY NOT (`w0`.`IsAutomatic`)
SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline`
FROM `Missions` AS `m` FROM `Missions` AS `m`
WHERE DATEVALUE(`m`.`Timeline`) >= @__dateTimeOffset_Date_0 WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@__dateTimeOffset_Date_0)
"""); """);
} }

@ -2304,9 +2304,9 @@ FROM `Orders` AS `o`
await base.Select_datetime_TimeOfDay_component(async); await base.Select_datetime_TimeOfDay_component(async);
AssertSql( AssertSql(
""" """
SELECT CONVERT(time, [o].[OrderDate]) SELECT IIF(`o`.`OrderDate` IS NULL, NULL, TIMEVALUE(`o`.`OrderDate`))
FROM [Orders] AS [o] FROM `Orders` AS `o`
"""); """);
} }

@ -1832,8 +1832,10 @@ WHERE (
await base.Time_of_day_datetime(isAsync); await base.Time_of_day_datetime(isAsync);
AssertSql( AssertSql(
$@"SELECT CAST(`o`.`OrderDate` AS time) """
FROM `Orders` AS `o`"); SELECT IIF(`o`.`OrderDate` IS NULL, NULL, TIMEVALUE(`o`.`OrderDate`))
FROM `Orders` AS `o`
""");
} }
public override async Task TypeBinary_short_circuit(bool isAsync) public override async Task TypeBinary_short_circuit(bool isAsync)

@ -8278,9 +8278,9 @@ ORDER BY `u`.`Nickname`, `m`.`Id`
await base.Time_of_day_datetimeoffset(async); await base.Time_of_day_datetimeoffset(async);
AssertSql( AssertSql(
""" """
SELECT CONVERT(time, [m].[Timeline]) SELECT TIMEVALUE(`m`.`Timeline`)
FROM [Missions] AS [m] FROM `Missions` AS `m`
"""); """);
} }
@ -10308,7 +10308,7 @@ ORDER BY NOT (`w0`.`IsAutomatic`)
SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline`
FROM `Missions` AS `m` FROM `Missions` AS `m`
WHERE DATEVALUE(`m`.`Timeline`) >= @__dateTimeOffset_Date_0 WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@__dateTimeOffset_Date_0)
"""); """);
} }

@ -620,7 +620,7 @@ WHERE 'Kiwi' = `a`.`Discriminator`
await base.Setting_foreign_key_to_a_different_type_throws(); await base.Setting_foreign_key_to_a_different_type_throws();
AssertSql( AssertSql(
""" """
SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn` SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Discriminator`, `a`.`Name`, `a`.`Species`, `a`.`EagleId`, `a`.`IsFlightless`, `a`.`FoundOn`
FROM `Animals` AS `a` FROM `Animals` AS `a`
WHERE `a`.`Discriminator` = 'Kiwi' WHERE `a`.`Discriminator` = 'Kiwi'

@ -179,7 +179,7 @@ WHERE `a`.`CountryId` = 1
await base.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async); await base.Can_use_IgnoreQueryFilters_and_GetDatabaseValues(async);
AssertSql( AssertSql(
""" """
SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group` SELECT TOP 2 `a`.`Id`, `a`.`CountryId`, `a`.`Name`, `a`.`Species`, `b`.`EagleId`, `b`.`IsFlightless`, `e`.`Group`
FROM (`Animals` AS `a` FROM (`Animals` AS `a`
INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`) INNER JOIN `Birds` AS `b` ON `a`.`Id` = `b`.`Id`)

@ -6584,9 +6584,9 @@ ORDER BY `g`.`Nickname`, `m`.`Id`
await base.Time_of_day_datetimeoffset(async); await base.Time_of_day_datetimeoffset(async);
AssertSql( AssertSql(
""" """
SELECT CONVERT(time, [m].[Timeline]) SELECT TIMEVALUE(`m`.`Timeline`)
FROM [Missions] AS [m] FROM `Missions` AS `m`
"""); """);
} }
@ -8299,7 +8299,7 @@ ORDER BY NOT (`w0`.`IsAutomatic`)
SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline` SELECT `m`.`Id`, `m`.`CodeName`, `m`.`Date`, `m`.`Difficulty`, `m`.`Duration`, `m`.`Rating`, `m`.`Time`, `m`.`Timeline`
FROM `Missions` AS `m` FROM `Missions` AS `m`
WHERE DATEVALUE(`m`.`Timeline`) >= @__dateTimeOffset_Date_0 WHERE DATEVALUE(`m`.`Timeline`) >= CDATE(@__dateTimeOffset_Date_0)
"""); """);
} }

Loading…
Cancel
Save