omnigraph-engine 0.4.2

Runtime engine for the Omnigraph graph database.
Documentation
// Basic: find person by name
query get_person($name: String) {
    match {
        $p: Person { name: $name }
    }
    return { $p.name, $p.age }
}

// Filter by age
query adults() {
    match {
        $p: Person
        $p.age > 30
    }
    return { $p.name, $p.age }
    order { $p.age desc }
}

// One hop traversal
query friends_of($name: String) {
    match {
        $p: Person { name: $name }
        $p knows $f
    }
    return { $f.name, $f.age }
}

// Reverse traversal: who works at a company
query employees_of($company: String) {
    match {
        $c: Company { name: $company }
        $p worksAt $c
    }
    return { $p.name }
}

// Two hop: friends of friends
query friends_of_friends($name: String) {
    match {
        $p: Person { name: $name }
        $p knows $mid
        $mid knows $fof
    }
    return { $fof.name }
}

// Negation: people who don't work anywhere
query unemployed() {
    match {
        $p: Person
        not { $p worksAt $_ }
    }
    return { $p.name }
}

// Aggregation: friend count
query friend_counts() {
    match {
        $p: Person
        $p knows $f
    }
    return {
        $p.name
        count($f) as friends
    }
    order { friends desc }
    limit 20
}

// Order and limit
query top_by_age() {
    match {
        $p: Person
    }
    return { $p.name, $p.age }
    order { $p.age desc }
    limit 2
}

// Aggregation: global count (no group key)
query total_people() {
    match {
        $p: Person
    }
    return { count($p) as total }
}

// Aggregation: sum/avg/min/max of age per company
query age_stats() {
    match {
        $p: Person
        $p worksAt $c
    }
    return {
        $c.name
        sum($p.age) as total_age
        avg($p.age) as avg_age
        min($p.age) as youngest
        max($p.age) as oldest
        count($p) as headcount
    }
}

// Aggregation: most connected person
query top_connected() {
    match {
        $p: Person
        $p knows $f
    }
    return { $p.name, count($f) as friends }
    order { friends desc }
    limit 1
}