Любые Java "общие" реализации Query- или Filtering-Language? - PullRequest
1 голос
/ 29 апреля 2019

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

И похоже, что все, кто сталкивается с задачей, делают то же самое - изучают, что такое ANTLR, как его настроить, как его использовать, а затем строят свою собственную реализацию QL.

Нет ли свободного / открытого примера или эталонной реализации базового / общего языка запросов (такого, как тот, который используется в Hibernate или Cassandra, которые фактически используют ANTLR за кулисами) или "где" часть обычный SQL? Я ДЕЙСТВИТЕЛЬНО полагаю, что это очень распространенная задача для многих проектов, и обидно, если все заново внедряют ее с нуля (имея в виду кривую обучения ANTLR).

Например, здесь: Реализация языка запросов свободной формы в Java принятый ответ гласит:

Проблема в том, что не существует такого понятия, как общий язык запросов. Каждый отличается, и ваш не исключение

Я бы не согласился с приведенным выше утверждением, поскольку SQL, QL Cassandra и HibernateQL имеют более 90% сходства, поэтому является общей частью между ними - той, которую я ищу с Надеюсь, что не внедрить колесо ...

Подойдет любой уровень полноты между следующими примерами:

Уровень 1:

  1. "х = 2" * * тысяча двадцать-восемь
  2. "х = 3"

Запрос / фильтр: «x> 1», ожидаемый результат: 2 и 3

Уровень 2:

  1. "x = 1 и y = 1"
  2. "х = 2 и у = 2"
  3. "х = 3 и у = 3"

Запрос / фильтр: «x> 1 и y <3», ожидаемый результат: 2 </p>

Уровень 3:

  1. "x = 1 и y = 1"
  2. "х = 2 и у = 2"
  3. "х = 3 и у = 3"

Запрос / фильтр: «x> 1 и (y <2 или y> 3)», ожидаемый результат: 2

...

Уровень N:

  1. "x = 1 и y = 1"
  2. "x = 2 и y = 2"
  3. "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 году:)

...