Я пытаюсь mock sql-синтаксис построить простой sql-интерфейс для хранения ключей. Значения по существу являются POJO
Примером может быть
select A.B.C from OBJ_POOL where A.B.X = 45 AND A.B.Y > '88' AND A.B.Z != 'abc';
OBJ_POOL - это всего лишь список POJO того же класса. В этом примере A будет базовым классом.
Class A
Class B
String C
Integer X
String Y
String Z
Теперь A.B.C эквивалентен A.getB(). getC()
Я использую Antlr для синтаксического анализа вышеуказанного утверждения, чтобы получить AST, а затем hoping
использовать Apache BeanUtils для рефлексивного получения/установки имен полей.
Я написал грамматику, которая строит AST Теперь я столкнулся с двумя проблемами.
- Как следует реализовать посетителя для предложения where? A.B.X = 45 подразумевает все объекты, имеющие поле X как 45, как должна произойти фильтрация, есть ли хороший способ сделать это?
- Есть ли какой-либо способ пересечь генерируемый АСТ без загромождения кода посетителя с помощью пользовательской логики (доступ к хранилищу, свойства getters/seters и т.д.).
Вторая проблема вызывает большее беспокойство, так как может быть много чего может сделать оператор.
Вкратце, любые предложения/ссылки/шаблоны проектирования для красивого анализа небольшого подмножества элемента выбора sql будут оценены
Спасибо