Как использовать фильтр даты с MuleSoft OData (версия 2.0) - PullRequest
0 голосов
/ 30 января 2019

Я использую MuleSoft (3.9) OData (2.0) RAML и передаю запрос в базу данных Oracle.При добавлении фильтра даты в URL-адресе &$filter=START_DATE le datetime'2016-01-01T11:00:00' выдается ошибка базы данных:

Команда SQL неправильно завершена.

Как можно добавить фильтр даты в OData RAML?

Запрос к базе данных генерируется как select....where START_DATE <= datetime'2016-01-01T11:00:00'.Нужно ли явно конвертировать, используя to_date?

1 Ответ

0 голосов
/ 09 февраля 2019

Используйте приведенную ниже переменную для разбора фильтра OData на фильтр SQL

%var odataFilterToSQLFilter = (odataFilter) -> 

    (( odataFilter replace "eq null" with "is null" 
     replace "ne null" with "is not null" 
     replace " eq " with " = " 
     replace " ne " with " != " 
     replace " gt " with " > " 
     replace " lt " with " < " 
     replace " ge " with " >= " 
     replace " le " with " <= " 
     replace " and " with " AND " 
     replace " or " with " OR " ) splitBy " " map  (
         ("TO_DATE('" ++ (($ replace "datetime'" with "" ) replace "T" with " ") ++ ",'yyyy-MM-dd HH24:MI:SS')") when $ as :string contains "datetime" otherwise $
     )) joinBy " "

%var toSQLWhere = (odataFilter) -> (" WHERE " ++ odataFilterToSQLFilter(odataFilter)) unless odataFilter == null otherwise ""

---
"SELECT " ++ generateSqlFields(filters.select) ++ " FROM $remoteEntityName"
 ++ ( 
    (toSQLWhere(filters.filter))
...