You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Добавить поддержку фильтра сравнения двух полей типа дата без учёта времени.
Функциональные требования
В настоящее время поддерживаются фильтры для полей типа дата вида "date(Поле1) < 2021-10-01", "2021-10-01 < date(Поле1) ", "Поле1 < Поле2", однако нет поддержки ситуации сравнения двух полей типа дата без учёта времени, то есть "date(Поле1) < date(Поле2)".
Основная обработка конструкции типа "date(Поле1) < 2021-10-01", "2021-10-01 < date(Поле1)" осуществляется в классе NewPlatform.Flexberry.ORM.ODataService.Expressions.FilterBinder.
date привязывается в методе "BindDate", однако при поверхностном просмотре кода создалось ощущение, что информация о наличии "date" никуда не заносится.
Преобразование для отбрасывания части со временем происходит вероятно в методе "private Expression CreateBinaryExpression(BinaryOperatorKind binaryOperator, Expression left, Expression right, bool liftToNull)":
"if (leftUnderlyingType == typeof(DateTime) && rightUnderlyingType == typeof(DateTimeOffset))
{
right = DateTimeOffsetToDateTime(right);
}
else if (rightUnderlyingType == typeof(DateTime) && leftUnderlyingType == typeof(DateTimeOffset))
{
left = DateTimeOffsetToDateTime(left);
}
if ((IsDateOrOffset(leftUnderlyingType) && IsDate(rightUnderlyingType)) ||
(IsDate(leftUnderlyingType) && IsDateOrOffset(rightUnderlyingType)))
{
left = CreateDateBinaryExpression(left);
right = CreateDateBinaryExpression(right);
}"
Однако ситуация, где у оператора сравнения с двух сторон указаны атрибуты типа дата с date здесь не обрабатывается.
Документация
В документации указано, что запросы такого рода не обрабатываются odata-adapter. После реализации эту информацию нужно убрать.
Цель
Добавить поддержку фильтра сравнения двух полей типа дата без учёта времени.
Функциональные требования
В настоящее время поддерживаются фильтры для полей типа дата вида "date(Поле1) < 2021-10-01", "2021-10-01 < date(Поле1) ", "Поле1 < Поле2", однако нет поддержки ситуации сравнения двух полей типа дата без учёта времени, то есть "date(Поле1) < date(Поле2)".
Исходный код
Основная обработка конструкции типа "date(Поле1) < 2021-10-01", "2021-10-01 < date(Поле1)" осуществляется в классе NewPlatform.Flexberry.ORM.ODataService.Expressions.FilterBinder.
date привязывается в методе "BindDate", однако при поверхностном просмотре кода создалось ощущение, что информация о наличии "date" никуда не заносится.
Преобразование для отбрасывания части со временем происходит вероятно в методе "private Expression CreateBinaryExpression(BinaryOperatorKind binaryOperator, Expression left, Expression right, bool liftToNull)":
"if (leftUnderlyingType == typeof(DateTime) && rightUnderlyingType == typeof(DateTimeOffset))
{
right = DateTimeOffsetToDateTime(right);
}
else if (rightUnderlyingType == typeof(DateTime) && leftUnderlyingType == typeof(DateTimeOffset))
{
left = DateTimeOffsetToDateTime(left);
}
Однако ситуация, где у оператора сравнения с двух сторон указаны атрибуты типа дата с date здесь не обрабатывается.
Документация
В документации указано, что запросы такого рода не обрабатываются odata-adapter. После реализации эту информацию нужно убрать.
Тесты
В проекте https://github.com/Flexberry/ember-flexberry-data выключены тесты в "odata-reading-date-predicates-timeless-test". После реализации включить.
The text was updated successfully, but these errors were encountered: