Я должен создать график на основе результата запроса. После получения результатов на основе полученного столбца в виде String (столбец, представляющий предложение SQL) мне нужно сгенерировать соответствующие предложения по созданию графа следующим образом:
Полученный столбец:
_fn1(filed1, filed2, filed3, '', filed4, filed5) AS new_alias_field
Предложения, которые нужно сгенерировать для создания графа на Neo4j:
CREATE (new_alias_field:fields_from {column:'new_alias_field'})
CREATE (filed1:fields_to{column:'filed1'})
CREATE (filed2:fields_to{column:'filed2'})
CREATE (filed3:fields_to{column:'filed3'})
CREATE (filed4:fields_to{column:'filed4'})
CREATE (filed5:fields_to{column:'filed5'})
CREATE (fn1:function {name:'_fn1'})
CREATE
(filed1)-[:used_by {roles:['param']}]->(fn1),
(filed2)-[:used_by {roles:['param']}]->(fn1),
(filed3)-[:used_by {roles:['param']}]->(fn1),
(filed4)-[:used_by {roles:['param']}]->(fn1),
(filed4)-[:used_by {roles:['param']}]->(fn1)
CREATE
(fn1)-[:as ]->(new_alias_field)
Лучший способ добиться этого - создать парсер? или я должен использовать что-то вроде JSqlParser, поскольку исходная строка содержит некоторые операторы SQL? Стоит ли создавать собственный парсер? есть ли другой инструмент?
Я пытаюсь использовать JSqlParser, получить объекты, а затем преобразовать их. Все еще в процессе .
чтобы попробовать код в Neo4J, после запуска сценария создания вы можете запросить узлы, используя:
Match(new_alias_field{column:'new_alias_field'}) return new_alias_field
вы должны получить:




JSqlParser - отличный парсер, использующий шаблон посетителя. Я использовал для синтаксического анализа этих операторов следующее выражение
select <<statement>> from dual
Я обнаружил только одно ограничение: оператор IF, используемый в MSQL, еще не поддерживается.
Как только я проанализировал эти утверждения, я использовал аннотацию Spring
@NodeEnityty
Чтобы создать все объекты и сделать вставки, например, узел FieldsFrom будет выглядеть так:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@NodeEntity
public class FieldsFrom {
@Id
@GeneratedValue
private Long id;
private String name;
@Relationship(type= "USED_BY", direction = Relationship.INCOMING)
private Set<FieldsTo> fieldsTo;
}
После всей обработки и всех прошивок я использовал https://github.com/neo4j-contrib/neovis.js