Datomic - получить все данные, относящиеся к произвольному запросу
Учитывая произвольный двухэлементный запрос q к базе данных d, возможно ли получить запрос x из q, который при запуске против d вернул бы все соответствующие данные r, необходимые для получения результата q на d? Результаты q на d должны совпадать с результатами q на r.
Я пытаюсь синхронизировать данные с клиентом datascript. Я знаю все запросы заранее, и я хотел бы создать подмножество моей базы данных базы данных в сценарии данных, ограниченное датумами, относящимися к запросам на стороне клиента. Для простоты предположим, что нет параметризованных запросов, хотя я ожидал бы, что с заполнителями можно достичь того же эффекта для произвольных входных параметров запроса, и было бы предпочтительным решение, которое учитывает их.
Я знаю, что могу получить все идентификаторы сущностей, возвращаемые запросом, изменив его и запустив в отношении базы данных, а затем коснувшись всех этих сущностей, но я надеюсь на что-то более эффективное, которое возвращает только подмножество базовых значений сущностей, связанных с запрос, и это может быть получено из запроса q ALONE без необходимости запуска q на d вначале.
Благодарю.
1 ответ
Я так не думаю - запросы не работают напрямую с данными. Они начинаются с данных, если вы запрашиваете базу данных, но преобразуются в наборы, и все последующие операции выполняются с наборами. Это позволяет выполнять запросы в произвольных коллекциях так же, как они работают в двухатомных индексах.
Я считаю, что https://github.com/mpdairy/posh попытался выполнить анализ запросов, чтобы выяснить, к каким датам он относится. Может быть, посмотрим?