Java源码示例:org.neo4j.driver.v1.StatementResult
示例1
public Map<String,List<Object>> runQueryComplexResult(NeoProfiler parent, String query, String...columns) {
HashMap<String,List<Object>> all = new HashMap<String,List<Object>>();
List<Object> retvals = new ArrayList<Object>();
System.out.println(query);
Session s = parent.getDriver().session();
try ( Transaction tx = s.beginTransaction()) {
// log.info(query);
StatementResult result = tx.run(query);
while(result.hasNext()) {
Map<String,Object> row = result.next().asMap();
for(String col : columns) {
if(!all.containsKey(col)) all.put(col, new ArrayList<Object>());
all.get(col).add(row.get(col));
}
}
tx.close();
} finally {
s.close();
}
return all;
}
示例2
private ArrayList<SubDisk> createSubDisksList() {
ArrayList<SubDisk> list = new ArrayList<>();
StatementResult result = connector.executeRead("MATCH (p)-[:CONTAINS]->(d:SubDisk)-[:VISUALIZES]->(element) "
+ "RETURN d.ringWidth AS ringWidth, d.height as height," +
" d.size AS size, ID(d) AS id, ID(p) AS parentID, ID(element) AS visualizedID ORDER BY element.hash");
result.forEachRemaining(d -> {
long visualizedID = d.get("visualizedID").asLong();
long parentID = d.get("parentID").asLong();
long id = d.get("id").asLong();
double ringWidth = d.get("ringWidth").asDouble();
double height = d.get("height").asDouble();
SubDisk disk = new SubDisk(visualizedID, parentID, id, ringWidth, height);
list.add(disk);
setPositionToPackages(disk);
});
return list;
}
示例3
private void calculateFloors(Node building) {
Node position = connector.getPosition(building.id());
double bHeight = building.get("height").asDouble();
double bWidth = building.get("width").asDouble();
double bLength = building.get("length").asDouble();
double bPosX = position.get("x").asDouble();
double bPosY = position.get("y").asDouble();
double bPosZ = position.get("z").asDouble();
StatementResult floors = connector.executeRead("MATCH (n)-[:CONTAINS]->(f:Floor) WHERE ID(n) = " + building.id() +
" RETURN f");
int floorNumberValue = connector.executeRead("MATCH (n)-[:CONTAINS]->(f:Floor) WHERE ID(n) = " + building.id() +
" RETURN COUNT(f) as floorNumber").single().get("floorNumber").asInt();
int floorCounter = 0;
while (floors.hasNext()) {
Record record = floors.next();
long floor = record.get("f").asNode().id();
floorCounter++;
String statement = cypherSetBuildingSegmentAttributes(floor, bWidth * 1.1, bLength * 1.1,
bHeight / (floorNumberValue + 2 ) * 0.80, floorColor);
statement +=
String.format("CREATE (n)-[:HAS]->(p:City:Position {x: %f, y: %f, z: %f})", bPosX,
(bPosY - ( bHeight / 2) ) + bHeight / ( floorNumberValue + 2 ) * floorCounter, bPosZ);
connector.executeWrite(statement);
}
}
示例4
private String toMetaDataFunction(Node function) {
String belongsTo = "";
String dependsOn = "";
StatementResult parent = connector.executeRead(
"MATCH (parent)-[:DECLARES]->(function:Function) WHERE ID(function) = " + function.id() + " RETURN parent.hash");
if(parent.hasNext()) {
belongsTo = parent.single().get("parent.hash").asString();
}
StatementResult dependentList = connector.executeRead(
"MATCH (function:Function)-[:DEPENDS_ON]->(el) WHERE ID(function) = " + function.id() + " RETURN el");
if(dependentList.hasNext()) {
dependsOn = dependentList.single().get("el.hash").asString();
}
return formatLine("id", function.get("hash").asString()) +
formatLine("qualifiedName", escapeHtml4(function.get("fqn").asString())) +
formatLine("name", function.get("name").asString()) +
formatLine("type", "FAMIX.Function") +
formatLine("signature", getFunctionSignature(function)) +
formatLine("calls", getCalls(function)) +
formatLine("calledBy", getCalledBy(function)) +
formatLine("accesses", getAccesses(function)) +
formatLine("belongsTo", belongsTo) +
formatLine("dependsOn", dependsOn) +
formatEndline("filename", function.get("fileName").asString());
}
示例5
private String toMetaDataNegation(Node negation) {
String negated = "";
try {
StatementResult negations = connector.executeRead(
"MATCH (negation:Negation)-[:NEGATES]->(condition) WHERE ID(negation) = " + negation.id() + " RETURN condition.hash");
if(negations.hasNext()) {
negated = negations.single().get("condition.hash").asString();
}
} catch (Exception e) {
negated = "";
}
return formatLine("id", negation.get("hash").asString()) +
formatLine("type", "Negation") +
formatEndline("negated", negated);
}
示例6
@Override
public Map<String, String> executeQuery(String query, Map<String, Object> parameters, GraphQueryResultCallback handler) {
try (Session session = gremlinDriver.session()) {
StatementResult result = session.run(query, parameters);
long count = 0;
while (result.hasNext()) {
Record record = result.next();
Map<String, Object> asMap = handleInternalNode(record.asMap());
handler.process(asMap, result.hasNext());
count++;
}
Map<String,String> resultAttributes = new HashMap<>();
resultAttributes.put(NODES_CREATED, NOT_SUPPORTED);
resultAttributes.put(RELATIONS_CREATED, NOT_SUPPORTED);
resultAttributes.put(LABELS_ADDED, NOT_SUPPORTED);
resultAttributes.put(NODES_DELETED, NOT_SUPPORTED);
resultAttributes.put(RELATIONS_DELETED, NOT_SUPPORTED);
resultAttributes.put(PROPERTIES_SET, NOT_SUPPORTED);
resultAttributes.put(ROWS_RETURNED, String.valueOf(count));
return resultAttributes;
} catch (Exception ex) {
throw new ProcessException(ex);
}
}
示例7
private String toMetaDataStruct(Node struct) {
String belongsTo = "";
String dependsOn = "";
StatementResult parent = connector.executeRead(
"MATCH (parent)-[:DECLARES]->(struct:Struct) WHERE ID(struct) = " + struct.id() + " RETURN parent.hash");
if(parent.hasNext()) {
belongsTo = parent.single().get("parent.hash").asString();
}
StatementResult dependent = connector.executeRead(
"MATCH (struct:Struct)-[:DEPENDS_ON]->(type) WHERE ID(struct) = " + struct.id() + " RETURN type.hash");
if(dependent.hasNext()){
dependsOn = dependent.single().get("type.hash").asString();
}
return formatLine("id", struct.get("hash").asString()) +
formatLine("qualifiedName", struct.get("fqn").asString()) +
formatLine("name", struct.get("name").asString()) +
formatLine("type", "Struct") +
formatLine("belongsTo", belongsTo) +
formatLine(dependsOn, dependsOn) +
formatLine("filename", struct.get("fileName").asString());
}
示例8
private String toMetaDataUnion(Node union) {
String belongsTo = "";
String dependsOn = "";
StatementResult parent = connector.executeRead(
"MATCH (parent)-[:DECLARES]->(union:Union) WHERE ID(union) = " + union.id() + " RETURN parent.hash");
if(parent.hasNext()) {
belongsTo = parent.single().get("parent.hash").asString();
}
StatementResult dependent = connector.executeRead(
"MATCH (union:Union)-[:DEPENDS_ON]->(type) WHERE ID(union) = " + union.id() + " RETURN type.hash");
if(dependent.hasNext()){
dependsOn = dependent.single().get("type.hash").asString();
}
return formatLine("id", union.get("hash").asString()) +
formatLine("qualifiedName", union.get("fqn").asString()) +
formatLine("name", union.get("name").asString()) +
formatLine("type", "Union") +
formatLine("belongsTo", belongsTo) +
formatLine(dependsOn, dependsOn) +
formatLine("filename", union.get("fileName").asString());
}
示例9
private String toMetaDataEnum(Node enumNode) {
String belongsTo = "";
String dependsOn = "";
StatementResult parent = connector.executeRead(
"MATCH (parent)-[:DECLARES]->(enum:Enum) WHERE ID(enum) = " + enumNode.id() + " RETURN parent.hash");
if(parent.hasNext()) {
belongsTo = parent.single().get("parent.hash").asString();
}
StatementResult dependent = connector.executeRead(
"MATCH (enum:Enum)-[:DEPENDS_ON]->(type) WHERE ID(enum) = " + enumNode.id() + " RETURN type.hash");
if(dependent.hasNext()){
dependsOn = dependent.single().get("type.hash").asString();
}
return formatLine("id", enumNode.get("hash").asString()) +
formatLine("qualifiedName", enumNode.get("fqn").asString()) +
formatLine("name", enumNode.get("name").asString()) +
formatLine("type", "Enum") +
formatLine("belongsTo", belongsTo) +
formatLine(dependsOn, dependsOn) +
formatLine("filename", enumNode.get("fileName").asString());
}
示例10
private String toMetaDataEnumValue(Node enumValue) {
String belongsTo = "";
String dependsOn = "";
StatementResult parent = connector.executeRead(
"MATCH (parent)-[:DECLARES]->(enumValue:EnumConstant) WHERE ID(enumValue) = " + enumValue.id() + " RETURN parent.hash");
if(parent.hasNext()) {
belongsTo = parent.single().get("parent.hash").asString();
}
StatementResult dependent = connector.executeRead(
"MATCH (enumValue:EnumConstant)-[:DEPENDS_ON]->(type) WHERE ID(enumValue) = " + enumValue.id() + " RETURN type.hash");
if(dependent.hasNext()){
dependsOn = dependent.single().get("type.hash").asString();
}
return formatLine("id", enumValue.get("hash").asString()) +
formatLine("qualifiedName", enumValue.get("fqn").asString()) +
formatLine("name", enumValue.get("name").asString()) +
formatLine("type", "EnumValue") +
formatLine("belongsTo", belongsTo) +
formatLine(dependsOn, dependsOn) +
formatLine("filename", enumValue.get("fileName").asString());
}
示例11
private String getFunctionSignature(Node function){
String signature;
String returnType = "";
StatementResult returnTypeNodes = connector.executeRead(
"MATCH (function:Function)-[:RETURNS]->(node) WHERE ID(function) = " + function.id() + " RETURN node");
if(returnTypeNodes.hasNext()) {
returnType += returnTypeNodes.single().get("node").asNode().get("name").asString();
}
if(!returnType.endsWith("*")){
returnType += " ";
}
String functionName = function.get("name").asString();
List<Node> parameterList = new ArrayList<>();
StatementResult parameters = connector.executeRead(
"MATCH (function:Function)-[:HAS]->(node) WHERE ID(function) = " + function.id() + " RETURN node ORDER BY node.index");
while (parameters.hasNext()) {
parameterList.add(parameters.next().get("node").asNode());
}
//var parameterList = function.getRelationships(Direction.OUTGOING, Rels.HAS).map[endNode]
//sort parameters according to their index
//parameterList = parameterList.sortBy[p|p.getProperty("index", 0) as Integer]
String parameter = getFunctionParameters(parameterList);
signature = returnType + functionName + "(" + parameter + ")";
return signature;
}
示例12
private String toMetaDataEnum(Node e) {
String belongsTo = "";
StatementResult parent = connector.executeRead("MATCH (parent)-[:DECLARES]->(enum) WHERE ID(enum) = " + e.id()
+ " RETURN parent.hash");
if(parent.hasNext()) {
belongsTo = parent.single().get("parent.hash").asString();
}
return "\"id\": \"" + e.get("hash").asString() + "\"," +
"\n" +
"\"qualifiedName\": \"" + e.get("fqn").asString() + "\"," +
"\n" +
"\"name\": \"" + e.get("name").asString() + "\"," +
"\n" +
"\"type\": \"FAMIX.Enum\"," +
"\n" +
"\"modifiers\": \"" + getModifiers(e) + "\"," +
"\n" +
"\"belongsTo\": \"" + belongsTo + "\"" +
"\n";
}
示例13
private String toMetaDataEnumValue(Node ev) {
String belongsTo = "";
StatementResult parent = connector.executeRead("MATCH (parent)-[:DECLARES]->(enumValue) WHERE ID(enumValue) = " + ev.id()
+ " RETURN parent.hash");
if(parent.hasNext()) {
belongsTo = parent.single().get("parent.hash").asString();
}
return "\"id\": \"" + ev.get("hash").asString() + "\"," +
"\n" +
"\"qualifiedName\": \"" + ev.get("fqn").asString() + "\"," +
"\n" +
"\"name\": \"" + ev.get("name").asString() + "\"," +
"\n" +
"\"type\": \"FAMIX.EnumValue\"," +
"\n" +
"\"belongsTo\": \"" + belongsTo + "\"" +
"\n";
}
示例14
public Value runQuerySingleResult(NeoProfiler parent, String query, String columnReturn) {
Session s = parent.getDriver().session();
try ( Transaction tx = s.beginTransaction()) {
// log.info(query);
StatementResult result = tx.run(query);
if(result.hasNext()) {
Value val = result.next().get(columnReturn);
return val;
}
return null;
} finally {
s.close();
}
}
示例15
/**
* Test {@link CyNodeLoadingHandler} to see if nodes are mapped from RDF and loaded into Neo4J
*/
@Test
public void testNodes () throws Exception
{
try (
Driver neoDriver = GraphDatabase.driver( "bolt://127.0.0.1:7687", AuthTokens.basic ( "neo4j", "test" ) );
)
{
Session session = neoDriver.session ( AccessMode.READ );
StatementResult cursor = session.run ( "MATCH ( n:TestNode ) RETURN COUNT ( n ) AS ct" );
Assert.assertEquals ( "Wrong count for TestNode", 2, cursor.next ().get ( "ct" ).asLong () );
cursor = session.run ( "MATCH ( n:TestNode { iri:'" + iri ( "ex:2" ) + "'} ) RETURN properties ( n ) AS props" );
assertTrue ( "ex:2 not returned!", cursor.hasNext () );
Map<String, Object> map = cursor.next ().get ( "props" ).asMap ();
assertEquals ( "Wrong property!", "another string", map.get ( "attrib3" ) );
}
}
示例16
@Override
public StatementResult read(final String query) throws DataDeleteException {
deleteDetachKeywordValidation(query);
try ( Session session = GraphDBConnection.getInstance().getDriver().session() )
{
StatementResult records = session.readTransaction( new TransactionWork<StatementResult>()
{
@Override
public StatementResult execute( Transaction tx )
{
return runQuery( tx,query );
}
} );
return records;
}
}
示例17
public static SubGraph run(SubGraph searchResult1, ApiLocatorContext context){
SubGraph r = new SubGraph();
r.getNodes().addAll(searchResult1.getNodes());
r.cost = searchResult1.cost;
for (long node : searchResult1.getNodes()) {
Session session = context.connection.session();
String stat = "match p=(n1)-[:" + CodeInDocxFileExtractor.API_EXPLAINED_BY + "]->(n2) where id(n1)=" + node + " unwind relationships(p) as r return id(r), id(startNode(r)), id(endNode(r))";
StatementResult rs = session.run(stat);
while (rs.hasNext()) {
Record item=rs.next();
long node1 = item.get("id(startNode(r))").asLong();
long node2 = item.get("id(endNode(r))").asLong();
long rel = item.get("id(r)").asLong();
r.getNodes().add(node1);
r.getNodes().add(node2);
r.getEdges().add(rel);
}
session.close();
}
return r;
}
示例18
public static SubGraph run(String query, SubGraph searchResult1, SubGraph linkedSearchResult1, ApiLocatorContext context){
SubGraph r = new SubGraph();
r.getNodes().addAll(searchResult1.getNodes());
r.cost = searchResult1.cost;
List<LuceneSearchResult> luceneSearchResults=context.getLuceneSearcher().query(query);
luceneSearchResults.sort((LuceneSearchResult a, LuceneSearchResult b)->{
Double aDist=new Double(dist(a.nodeSet,searchResult1.getNodes(),context));
Double bDist=new Double(dist(b.nodeSet,searchResult1.getNodes(),context));
return aDist.compareTo(bDist);
});
for (int i=0;i<3&&i<luceneSearchResults.size();i++) {
r.getNodes().add(luceneSearchResults.get(i).id);
for (long node:linkedSearchResult1.getNodes()){
Session session=context.connection.session();
StatementResult rs=session.run("match (a)-[r]-(b) where id(a)="+node+" and id(b)="+luceneSearchResults.get(i).id+" return id(r)");
while (rs.hasNext()){
Record item=rs.next();
r.getEdges().add(item.get("id(r)").asLong());
}
session.close();
}
}
return r;
}
示例19
public Map<String, String> getLabels(boolean refresh) {
if (labels == null || refresh) {
Map<String, String> old = labels == null ?
new LinkedHashMap<String, String>() : new LinkedHashMap<>(labels);
labels = new LinkedHashMap<>();
StatementResult result = this.neo4jConnectionManager.execute("CALL db.labels()");
Set<String> colors = new HashSet<>();
while (result.hasNext()) {
Record record = result.next();
String label = record.get("label").asString();
String color = old.get(label);
while (color == null || colors.contains(color)) {
color = Neo4jConversionUtils.getRandomLabelColor();
}
colors.add(color);
labels.put(label, color);
}
}
return labels;
}
示例20
public StatementResult execute(String cypherQuery,
InterpreterContext interpreterContext) {
Map<String, Object> params = new HashMap<>();
if (interpreterContext != null) {
ResourcePool resourcePool = interpreterContext.getResourcePool();
Set<String> keys = extractParams(cypherQuery, PROPERTY_PATTERN, REPLACE_CURLY_BRACKETS);
keys.addAll(extractParams(cypherQuery, $_PATTERN, REPLACE_$));
for (String key : keys) {
Resource resource = resourcePool.get(key);
if (resource != null) {
params.put(key, resource.get());
}
}
}
LOGGER.debug("Executing cypher query {} with params {}", cypherQuery, params);
StatementResult result;
try (Session session = getSession()) {
result = params.isEmpty()
? getSession().run(cypherQuery) : getSession().run(cypherQuery, params);
}
return result;
}
示例21
@Test
public void shouldCopyDatabase() {
try (
Neo4jContainer neo4jContainer = new Neo4jContainer()
.withDatabase(MountableFile.forClasspathResource("/test-graph.db"));
) {
neo4jContainer.start();
try (
Driver driver = getDriver(neo4jContainer);
Session session = driver.session()
) {
StatementResult result = session.run("MATCH (t:Thing) RETURN t");
assertThat(result.list().stream().map(r -> r.get("t").get("name").asString()))
.containsExactlyInAnyOrder("Thing", "Thing 2", "Thing 3", "A box");
}
}
}
示例22
private void addPackagesNoRoot() {
try {
StatementResult packagesNoRoot = connector.executeRead(
"MATCH (n:Package) WHERE NOT (n)<-[:CONTAINS]-(:Package) RETURN ID(n) AS id");
packagesNoRoot.forEachRemaining((node) -> {
MainDisk disk = new MainDisk(node.get("id").asLong(), -1, ringWidth, height,
namespaceTransparency);
model.addRDElement(disk);
});
} catch (Exception e) {
log.error(e);
}
}
示例23
private void addTypes() {
try {
StatementResult result = connector.executeRead(
"MATCH (n:Package)-[:CONTAINS]->(t:Type) WHERE EXISTS(t.hash) AND (t:Class OR t:Interface " +
"OR t:Annotation OR t:Enum) AND NOT t:Inner RETURN ID(t) AS tID, ID(n) AS nID");
result.forEachRemaining(node -> {
SubDisk disk = new SubDisk(node.get("tID").asLong(), node.get("nID").asLong(),
ringWidth, height, classTransparency, classColor);
model.addRDElement(disk);
});
} catch (Exception e) {
log.error(e);
}
}
示例24
private void addMethods() {
try {
StatementResult methods = connector.executeRead("MATCH (n:Package)-[:CONTAINS]->(t:Type)-[:DECLARES]->(m:Method)" +
" WHERE EXISTS(t.hash) AND (t:Class OR t:Interface OR t:Annotation OR t:Enum) AND NOT t:Inner AND EXISTS(m.hash)" +
" RETURN m AS node, m.effectiveLineCount AS line, ID(t) AS tID");
methods.forEachRemaining(result -> {
RDElement element = factory.createFromMethod(result, height, ringWidth, ringWidthAD, methodTransparency, minArea, methodColor);
model.addRDElement(element);
});
} catch (Exception e) {
log.error(e);
}
}
示例25
private void addFields() {
try {
StatementResult fields = connector.executeRead("MATCH (n:Package)-[:CONTAINS]->(t:Type)-[:DECLARES]->(f:Field)" +
" WHERE EXISTS(t.hash) AND (t:Class OR t:Interface OR t:Annotation OR t:Enum) AND NOT t:Inner AND EXISTS(f.hash)" +
" RETURN f AS node, ID(t) AS tID");
fields.forEachRemaining(result -> {
RDElement element = factory.createFromField(result, ringWidthAD, height, dataTransparency, dataColor);
model.addRDElement(element);
});
} catch (Exception e) {
log.error(e);
}
}
示例26
private void addFiles() {
try {
StatementResult translationUnits = connector.executeRead("MATCH (n:File) RETURN ID(n) as id");
translationUnits.forEachRemaining((node) -> {
MainDisk disk = new MainDisk(node.get("id").asLong(), -1, ringWidth, height, namespaceTransparency);
model.addRDElement(disk);
});
} catch (Exception e) {
log.error(e);
}
}
示例27
private void addTranslationUnits() {
// MainDisk root = new MainDisk(-1, -1, ringWidth, height, namespaceTransparency);
// model.addRDElement(root);
try {
StatementResult translationUnits = connector.executeRead("MATCH (f:File)-[:CONTAINS]->(n:TranslationUnit) RETURN ID(n) as id, ID(f) as pId");
translationUnits.forEachRemaining((node) -> {
SubDisk disk = new SubDisk(node.get("id").asLong(), node.get("pId").asLong(), ringWidth, height, classTransparency, classColor);
model.addRDElement(disk);
});
} catch (Exception e) {
log.error(e);
}
}
示例28
private void addFunctions() {
try {
String query = "MATCH (t:TranslationUnit)-[:DECLARES]->(f:Function) WHERE EXISTS(f.hash) RETURN f as node, ID(t) as tID";
StatementResult translationUnits = connector.executeRead(query);
translationUnits.forEachRemaining((result) -> {
RDElement element = factory.createFromFunction(result, height, ringWidthAD, methodTransparency, minArea, methodColor);
model.addRDElement(element);
});
} catch (Exception e) {
log.error(e);
}
}
示例29
private void addVariables() {
try {
String query = "MATCH (t:TranslationUnit)-[:DECLARES]->(v:Variable) WHERE EXISTS(v.hash) RETURN v as node, ID(t) as tID";
StatementResult translationUnits = connector.executeRead(query);
translationUnits.forEachRemaining((result) -> {
RDElement element = factory.createFromVariable(result, height, ringWidthAD, dataTransparency, dataColor);
model.addRDElement(element);
});
} catch (Exception e) {
log.error(e);
}
}
示例30
@Override
public Map<String, String> executeQuery(String query, Map<String, Object> parameters, GraphQueryResultCallback handler) {
try (Session session = neo4JDriver.session()) {
StatementResult result = session.run(query, parameters);
long count = 0;
while (result.hasNext()) {
Record record = result.next();
Map<String, Object> asMap = handleInternalNode(record.asMap());
handler.process(asMap, result.hasNext());
count++;
}
ResultSummary summary = result.summary();
SummaryCounters counters = summary.counters();
Map<String,String> resultAttributes = new HashMap<>();
resultAttributes.put(NODES_CREATED,String.valueOf(counters.nodesCreated()));
resultAttributes.put(RELATIONS_CREATED,String.valueOf(counters.relationshipsCreated()));
resultAttributes.put(LABELS_ADDED,String.valueOf(counters.labelsAdded()));
resultAttributes.put(NODES_DELETED,String.valueOf(counters.nodesDeleted()));
resultAttributes.put(RELATIONS_DELETED,String.valueOf(counters.relationshipsDeleted()));
resultAttributes.put(PROPERTIES_SET, String.valueOf(counters.propertiesSet()));
resultAttributes.put(ROWS_RETURNED, String.valueOf(count));
return resultAttributes;
} catch (Exception ex) {
getLogger().error("", ex);
throw new ProcessException(ex);
}
}