Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить поддержку фильтра сравнения двух полей типа дата без учёта времени. #236

Open
Anisimova2020 opened this issue Oct 1, 2021 · 0 comments

Comments

@Anisimova2020
Copy link
Contributor

Цель

Добавить поддержку фильтра сравнения двух полей типа дата без учёта времени.

Функциональные требования

В настоящее время поддерживаются фильтры для полей типа дата вида "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. После реализации эту информацию нужно убрать.

Тесты

В проекте https://github.com/Flexberry/ember-flexberry-data выключены тесты в "odata-reading-date-predicates-timeless-test". После реализации включить.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant