Строка Java в Neo4J Создать операторы Graph - PullRequest
0 голосов
/ 23 сентября 2018

Я должен создать график на основе результата запроса.После получения результатов, основанных на извлеченном столбце в виде строки (столбец, представляющий предложение 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

, вы должны получить:

Result Graph

1 Ответ

0 голосов
/ 28 сентября 2018

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

...