3.2.6.2.5. Последовательная выборка
DataManager
может выполнять последовательную выборку данных из результатов предыдущего запроса. Эта возможность используется в универсальном фильтре при последовательном наложении фильтров.
Данный механизм работает следующим образом:
-
При получении
LoadContext
с установленными атрибутамиprevQueries
иqueryKey
DataManager
выполняет выборку по предыдущему запросу и сохраняет идентификаторы полученных сущностей в таблицеSYS_QUERY_RESULT
(соответствующей сущностиsys$QueryResult
), разделяя наборы записей по идентификаторам пользовательских сессий и ключу сеанса выборкиqueryKey
. -
Текущий запрос модифицируется для объединения с результатами предыдущего, так что в итоге возвращает данные, соответствующие условиям обоих запросов, объединенных по "И".
-
Далее процесс может повторяться, при этом уменьшающийся набор предыдущих результатов удаляется из таблицы
SYS_QUERY_RESULT
и заполняется заново.
Таблица SYS_QUERY_RESULT
периодически очищается от ненужных результатов запросов, оставленных завершенными пользовательскими сессиями. Для этого предназначен метод deleteForInactiveSessions
бина QueryResultsManagerAPI
, который вызывается шедулером Spring, объявленным в cuba-spring.xml
. По умолчанию это происходит раз в 10 минут, но вы можете задать другой интервал в миллисекундах, используя свойство приложения cuba.deleteOldQueryResultsInterval
в модуле core.