13. Buscando dados no Neo4j
3. Cypher
start programmer=(3)
match (programmer)-[:PAIRED]->(pair)
where pair.age > 30
return pair
order by pair.age
skip 5 limit 10
14. Buscando dados no Neo4j
3. Cypher
private static Iterator<Node> comQuemUmDevPareou()
{
ExecutionEngine engine = new ExecutionEngine(db);
ExecutionResult result = engine.execute( "start programmer=(3) " +
"match (programmer)-[:PAIRED]->(pair) where pair.age > 30 " +
"return pair " +
"order by pair.age " +
"skip 5 limit 10" );
Iterator<Node> pairs = result.columnAs( "pair" );
return pairs;
}
16. Definindo a linguagem
Start
Match start programmer=(3)
match (programmer)-[:PAIRED]->(pair)
Where where pair.age > 30
Return return pair
order by pair.age
Order By skip 5 limit 10
Skip & Limit
24. AST
Query.scala
package org.neo4j.cypher.commands
case class Start(startItems: StartItem*)
StartItem.scala
package org.neo4j.cypher.commands
abstract sealed class StartItem(val variable:String)
abstract class NodeStartItem(varName:String) extends StartItem(varName)
case class NodeById(varName:String, id: Long*) extends NodeStartItem(varName)
26. Toda a query
package org.neo4j.cypher.parser
class CypherParser extends JavaTokenParsers with StartClause with MatchClause with WhereClause
with ReturnClause with SkipLimitClause with OrderByClause with StringExtras {
def query: Parser[Query] = start ~ opt(matching) ~ opt(where) ~ returns ~ opt(order) ~ opt(skip) ~ opt(limit) ^^ {
case start ~ matching ~ where ~ returns ~ order ~ skip ~ limit => {
val slice = (skip,limit) match {
case (None,None) => None
case (s,l) => Some(Slice(s,l))
}
val (pattern:Option[Match], namedPaths:Option[NamedPaths]) = matching match {
case Some((p,NamedPaths())) => (Some(p),None)
case Some((Match(),nP)) => (None,Some(nP))
case Some((p,nP)) => (Some(p),Some(nP))
case None => (None,None)
}
Query(returns._1, start, pattern, where, returns._2, order, slice, namedPaths)
}
}