CONNECT remote:localhost root orientdb
CREATE DATABASE PLOCAL:/usr/local/Cellar/orientdb/2.2.15/libexec/databases/Test admin admin PLOCAL GRAPH
# CONNECT PLOCAL:../databases/Test admin admin
CREATE CLASS User EXTENDS V
CREATE CLASS Follows EXTENDS E
CREATE CLASS Friend EXTENDS E
CREATE VERTEX User SET id = 1
CREATE VERTEX User SET id = 2
CREATE VERTEX User SET id = 3
CREATE VERTEX User SET id = 4
CREATE VERTEX User SET id = 5
# 1 follows 2 3 4
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=1 ) TO ( SELECT FROM User WHERE id=2 )
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=1 ) TO ( SELECT FROM User WHERE id=3 )
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=1 ) TO ( SELECT FROM User WHERE id=4 )
# 2 follows 1 back (only symmetric follow, or 'friendship')
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=2 ) TO ( SELECT FROM User WHERE id=1 )
# test separate type of edge for a symmetrical follow
CREATE EDGE Friend FROM ( SELECT FROM User WHERE id=2 ) TO ( SELECT FROM User WHERE id=1 )
# 3 follows 4
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=3 ) TO ( SELECT FROM User WHERE id=4 )
# 5 follows 1
CREATE EDGE Follows FROM ( SELECT FROM User WHERE id=5 ) TO ( SELECT FROM User WHERE id=1 )
# query 1's outgoing follows
# select is preferred over traverse, it seems
SELECT EXPAND( OUT('Follows') ) FROM User WHERE id=1
SELECT FROM (TRAVERSE out("Follows") FROM (SELECT FROM User WHERE id=1) WHILE $depth <= 2) WHERE $depth >= 1
# query incoming follows for 1
# select is preferred over traverse, it seems
SELECT EXPAND( IN('Follows') ) FROM User WHERE id=1
SELECT FROM (TRAVERSE in("Follows") FROM (SELECT FROM User WHERE id=1) WHILE $depth <= 2) WHERE $depth >= 1
# query 1's mutual follows (symmetric)
SELECT Expand(intersect(out('Follows'), in('Follows'))) FROM User where id=1
# query 1's mutual friends (using separate friends edges)
SELECT EXPAND( BOTH('Friend') ) FROM User WHERE id=1
# for fun, query 1's friends' friends
SELECT EXPAND( OUT('Follows').OUT('Follows') ) FROM User WHERE id=1
DROP DATABASE Test