Строка Java в Neo4J Создать операторы Graph
Я должен создать график на основе результата запроса. После получения результатов, основанных на извлеченном столбце как 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
Вы должны получить:
1 ответ
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