Пытаясь найти ответ, я обнаружил, что ANTLR представляется стандартной / эталонной реализацией для общей задачи реализации языка запросов.
И похоже, что все, кто сталкивается с задачей, делают то же самое - изучают, что такое ANTLR, как его настроить, как его использовать, а затем строят свою собственную реализацию QL.
Нет ли свободного / открытого примера или эталонной реализации базового / общего языка запросов (такого, как тот, который используется в Hibernate или Cassandra, которые фактически используют ANTLR за кулисами) или "где" часть обычный SQL? Я ДЕЙСТВИТЕЛЬНО полагаю, что это очень распространенная задача для многих проектов, и обидно, если все заново внедряют ее с нуля (имея в виду кривую обучения ANTLR).
Например, здесь: Реализация языка запросов свободной формы в Java
принятый ответ гласит:
Проблема в том, что не существует такого понятия, как общий язык запросов. Каждый отличается, и ваш не исключение
Я бы не согласился с приведенным выше утверждением, поскольку SQL, QL Cassandra и HibernateQL имеют более 90% сходства, поэтому является общей частью между ними - той, которую я ищу с Надеюсь, что не внедрить колесо ...
Подойдет любой уровень полноты между следующими примерами:
Уровень 1:
- "х = 2" * * тысяча двадцать-восемь
- "х = 3"
Запрос / фильтр: «x> 1», ожидаемый результат: 2 и 3
Уровень 2:
- "x = 1 и y = 1"
- "х = 2 и у = 2"
- "х = 3 и у = 3"
Запрос / фильтр: «x> 1 и y <3», ожидаемый результат: 2 </p>
Уровень 3:
- "x = 1 и y = 1"
- "х = 2 и у = 2"
- "х = 3 и у = 3"
Запрос / фильтр: «x> 1 и (y <2 или y> 3)», ожидаемый результат: 2
...
Уровень N:
- "x = 1 и y = 1"
- "x = 2 и y = 2"
- "x = 3 и y = '3 | 4 | 5'"
Запрос / фильтр: "(x> 2 или x in ('z', 1)) и (y in (1,2) или (y означает"% 3% "и y означает"% 5% ") )»
Ожидаемый результат: 1 и 3
Вопрос: существует ли существующее (на основе ANTLR или нет) решение Java (расширяемое или нет), которое можно использовать (в качестве основы или в качестве примера для построения / расширения) в качестве механизма запросов / фильтров для приведенные выше примеры?
P.S. сделал здесь «домашнее задание», но никто не отвечает на мою конкретную тему ... может быть, это слишком много, чтобы ожидать в 2019 году:)