Запрос JCR SQL2 с динамическим сравнением дат - PullRequest
4 голосов
/ 11 января 2012

Мне нужно запросить репозиторий jcr, чтобы найти узлы, в которых свойство даты (например, jcr: creation) моложе определенной даты.

Используя SQL2, я проверяю «jcr: creation> date»вот так (работает нормально):

SELECT * FROM [nt:base] AS s WHERE s.[jcr:created] > CAST('2012-01-05T00:00:00.000Z' AS DATE)

Теперь сложная часть:

Есть дополнительное свойство, которое объявляет количество дней, которые нужно добавить кДата создания: динамически.

Допустим, свойство содержит 5 (дней), тогда запрос должен проверять не «jcr: creation> date», а «(jcr: creation + 5)> date».Следующий узел, содержащий значение свойства 10, должен быть проверен с помощью «(jcr: creation + 10)> date».

Есть ли интеллектуальный / динамический операнд, который мог бы это сделать?Поскольку свойство является специфичным для узла, я не могу добавить его статически в запрос, но оно должно прочитать его для каждого узла.

Ответы [ 3 ]

6 голосов
/ 11 января 2012

Jackrabbit в настоящее время не поддерживает такие динамические ограничения.

Я считаю, что наилучшим решением на данный момент является выполнение запроса с фиксированным ограничением даты, а затем явная фильтрация результатов самостоятельно.

Альтернативным решением будет предварительное вычисление значения «jcr: creation + extratime» и его сохранение в дополнительном свойстве.Такое вычисление может быть либо размещено в коде, который в первую очередь создает / обновляет узлы, либо вы можете поместить его в прослушиватель наблюдений, чтобы он запускался независимо от того, как изменяется узел.

2 голосов
/ 10 августа 2013

Мне нужно было найти документы, созданные за последние 12 часов.

Мне было трудно найти правильную дату в функции CAST, вставка для тех, кому она может понадобиться.*

0 голосов
/ 12 марта 2014

Я нашел там рецепт: test.sql2.txt

Список тестов.Мой запрос выглядит так:

SELECT * FROM [nt:base] where [jcr:created] > cast('+2012-01-01T00:00:00.000Z' as date)

Требуется все, что находится внутри приведенной строки: +yyyy-MM-ddT00:00:00.000Z

...