Skip to content

DOC-2415: Updated FROM syntax to v3 #268

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ CREATE QUERY sample_ex_3() FOR GRAPH Computer_Net {
start = {Computer.*};

// Sample one outgoing edge per source vertex = Random Walk
abs_sample = SELECT v FROM start:s -(:e)- :v
abs_sample = SELECT v FROM (s:start) -[e]- (v)
SAMPLE 1 EDGE WHEN s.outdegree() >= 1 // sample 1 target vertex from each source vertex
ACCUM
@@abs_edges += (s.id -> v.id),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
CREATE QUERY limit_ex_2 (INT j, INT k) FOR GRAPH Friend_Net
{
start = {Person.*};
result2 = SELECT v FROM start:v
result2 = SELECT v FROM (v:start)
ORDER BY v.id
LIMIT j, k;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
CREATE QUERY limit_ex_3 (INT j, INT k) FOR GRAPH Friend_Net {
start = {Person.*};

result3 = SELECT v FROM start:v
result3 = SELECT v FROM (v:start)
ORDER BY v.id
LIMIT k OFFSET j;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
CREATE QUERY limit_ex_1 (INT k) FOR GRAPH Friend_Net {
start = {Person.*};

result1 = SELECT v FROM start:v
result1 = SELECT v FROM (v:start)
ORDER BY v.id
LIMIT k;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ CREATE QUERY top_popular() FOR GRAPH Friend_Net {
SumAccum<INT> @num_coworkers;
start = {Person.*};

result = SELECT v FROM start -((Friend|Coworker):e)- Person:v
result = SELECT v FROM (:start) -[e:Friend|Coworker]- (v:Person)
ACCUM CASE
WHEN e.type == "Friend" THEN v.@num_friends += 1
WHEN e.type == "Coworker" THEN v.@num_coworkers += 1
END
ORDER BY v.@num_friends DESC, v.@num_coworkers DESC;

PRINT result;
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
CREATE QUERY accum_wrong_example() SYNTAX v2 {
CREATE QUERY accum_wrong_example() SYNTAX v3 {
SumAccum<INT> @@count_total;
SumAccum<INT> @active_flag = 0;

result = SELECT p
FROM Person: p - (KNOWS) - Person: w
FROM (p:Person) -[:KNOWS]- (w:Person)
WHERE w.lastName == "Wang" AND p.firstName == "Peter"
ACCUM p.@active_flag += 1,
@@count_total += p.@active_flag; // <1>
@@count_total += p.@active_flag; // <1>
PRINT @@count_total, result[result.@active_flag];
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
CREATE QUERY accum_example() SYNTAX v2 {
CREATE QUERY accum_example() SYNTAX v3 {
SumAccum<INT> @@count_total;
SumAccum<INT> @active_flag = 0;

result = SELECT p
FROM Person: p - (KNOWS) - Person: w
FROM (p:Person) -[:KNOWS]- (w:Person)
WHERE w.lastName == "Wang" AND p.firstName == "Peter"
ACCUM p.@active_flag += 1
POST-ACCUM @@count_total += p.@active_flag;
PRINT @@count_total, result[result.@active_flag];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ INTERPRET QUERY () {
SumAccum<INT> @cnt2;
SumAccum<INT> @@global_t_count;

R = SELECT s
FROM Person:s-(Likes>) -:msg - (Has_Creator>)-Person:t
R = SELECT s
FROM (s:Person) -[:Likes]\-> (:msg) -[:Has_Creator]\-> (t:Person)
WHERE s.first_name == "Viktor" AND s.last_name == "Akhiezer"
AND t.last_name LIKE "S%" AND year(msg.creation_date) == 2012
ACCUM s.@cnt1 +=1 //execute this per match of the FROM pattern.
POST-ACCUM s.@cnt2 += s.@cnt1 // <1>
POST-ACCUM t.@cnt2 +=1 // <2>
POST-ACCUM(t) @@global_t_count += 1; // <3>

PRINT R [R.first_name, R.last_name, R.@cnt1, R.@cnt2];
}
PRINT R [R.first_name, R.last_name, R.@cnt1, R.@cnt2];
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ CREATE QUERY user_posts_2() FOR GRAPH Social_Net {
start = {Person.*};

// Find all user post topics and append them to the vertex list accum
user_postings = SELECT s FROM start:s -(Posted)- :g
user_postings = SELECT s FROM (s:start) -[:Posted]- (g)
ACCUM s.@person_posts += g;

user_postings = SELECT s from start:s -(Liked:e)- :g
user_postings = SELECT s FROM (s:start) -[e:Liked]- (g)
ACCUM s.@person_liked_info += e;

PRINT start;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ CREATE QUERY user_posts_by_topic() FOR GRAPH Social_Net {
start = {Person.*};

// Append subject and update the appearance count in the global map accum
posts = SELECT g FROM start -(Posted)- :g
posts = SELECT g FROM (:start) -[:Posted]- (g)
ACCUM @@post_topic_counts += (g.subject -> 1);

PRINT @@post_topic_counts;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ CREATE QUERY person_gender(STRING gender) FOR GRAPH Social_Net {
start = {ANY};

// Select all person vertices and check the gender attribute
friends = SELECT v FROM start:v
friends = SELECT v FROM (v:start)
WHERE v.type == "Person"
POST-ACCUM (v) CASE
WHEN (v.gender == gender) THEN
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
CREATE QUERY active_members (INT activity_threshold) FOR GRAPH Social_Net {
SumAccum<INT> @activity_amount;
start = {Person.*};
result = SELECT v FROM start:v -(:e)- Post:tgt
result = SELECT v FROM (v:start) -[e]- (tgt:Post)
ACCUM v.@activity_amount +=1
HAVING v.@activity_amount >= activity_threshold;
PRINT result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ CREATE QUERY print_member_activity() FOR GRAPH Social_Net
start = {Person.*};

/* --- equivalent statements -----
result = SELECT v FROM start:v -(:e)- Post:tgt
result = SELECT v FROM (v:start) -[e]- (tgt:Post)
ACCUM v.@activity_amount +=1
HAVING true; */

result = SELECT v FROM start:v -(:e)- Post:tgt
result = SELECT v FROM (v:start) -[e]- (tgt:Post)
ACCUM v.@activity_amount +=1;

PRINT result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ CREATE QUERY active_male_members() FOR GRAPH Social_Net
SumAccum<INT> @activity_amount;
start = {Person.*};
// The two statements produce equivalent results
result1 = SELECT v FROM start:v -(:e)- Post:tgt
result1 = SELECT v FROM (v:start) -[e:]-> (tgt:Post)
WHERE v.gender == "Male"
ACCUM v.@activity_amount +=1;

result2 = SELECT v FROM start:v -(:e)- Post:tgt
result2 = SELECT v FROM (v:start) -[e:]-> (tgt:Post)
ACCUM v.@activity_amount +=1
HAVING v.gender == "Male";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ CREATE QUERY multiple_edge_type_check_ex_2(VERTEX<Person> m1) FOR GRAPH Social_N
ListAccum<STRING> @@test_list1;
all_user = {m1};
all_user = SELECT s
FROM all_user:s - ((Posted|Liked|Friend):e) - (Post|Person):t
FROM (s:all_user) -[e:Posted|Liked|Friend]- (t:Post|Person)
ACCUM CASE
WHEN e.type == "Liked" THEN // for Liked edges
@@test_list1 += to_string(datetime_to_epoch(e.action_time))
Expand All @@ -12,4 +12,4 @@ CREATE QUERY multiple_edge_type_check_ex_2(VERTEX<Person> m1) FOR GRAPH Social_N
@@test_list1 += to_string(datetime_to_epoch(t.post_time))
END;
PRINT @@test_list1;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ CREATE QUERY multiple_edge_type_check_ex (VERTEX<Person> m1) FOR GRAPH Social_Ne
ListAccum<STRING> @@test_list_1, @@test_list_2, @@test_list_3;
all_user = {m1};
all_user = SELECT s
FROM all_user:s - ((Posted|Liked|Friend):e) - (Post|Person):t
FROM (s:all_user) -[e:Posted|Liked|Friend]- (t:Post|Person)
ACCUM @@test_list_1 += to_string(datetime_to_epoch(e.action_time)),
@@test_list_2 += t.gender,
@@test_list_3 += to_string(datetime_to_epoch(e.action_time)) + t.gender // <1>
;
PRINT @@test_list_1, @@test_list_2, @@test_list_3;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@ CREATE QUERY v_update_indirect_accum() FOR GRAPH Social_Net {
persons = {Person.*};
// To each post, attach a list of persons who liked the post
liked_posts = SELECT p
FROM persons:src -(Liked:e)- Post:p
FROM (src:persons) -[e:Liked]\-> (p:Post)
ACCUM
p.@posters += src;

// To each person who liked a post, attach a list of everyone
// who also liked one of this person's liked posts.
liked_posts = SELECT src
FROM liked_posts:src
FROM (src:liked_posts)
ACCUM
FOREACH v IN src.@posters DO
v.@fellows += src.@posters
END
ORDER BY src.subject;

PRINT persons[persons.@fellows];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ CREATE QUERY user_posts() FOR GRAPH Social_Net {
start = {Person.*};

// Find all user post topics and append them to the vertex list accum
user_postings = SELECT s FROM start:s -(Posted)- :g
user_postings = SELECT s FROM (s:start) -[:Posted]- (g)
ACCUM s.@person_posts += g.subject;

PRINT user_postings;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
CREATE QUERY print_cat_posts() FOR GRAPH Social_Net {
cat_posts = SELECT v FROM Post:v // select only those post vertices
cat_posts = SELECT v FROM (v:Post) // select only those post vertices
WHERE v.subject == "cats"; // which have a subset of 'cats'
PRINT cat_posts;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,42 +5,42 @@ CREATE QUERY find_female_members() FOR GRAPH Social_Net
// are equivalent (i.e., produce the same results)

all_vertices = {ANY}; # includes all posts and person
females = SELECT v FROM all_vertices:v
females = SELECT v FROM (v:all_vertices)
WHERE v.type == "Person" AND v.gender != "Male";

females = SELECT v FROM all_vertices:v
females = SELECT v FROM (v:all_vertices)
WHERE v.type == "Person" AND v.gender == "Female";

females = SELECT v FROM all_vertices:v
females = SELECT v FROM (v:all_vertices)
WHERE v.type == "Person" AND
NOT v.gender == "Male";

females = SELECT v FROM all_vertices:v
females = SELECT v FROM (v:all_vertices)
WHERE v.type != "Post" AND
NOT v.gender == "Male";

/* does not compile. cannot use NOT operator in combination with type attribute
females = SELECT v FROM all_vertices:v
WHERE NOT v.type != "Person" AND
NOT v.gender == "Male";
females = SELECT v FROM (v:all_vertices)
WHERE NOT v.type != "Person" AND
NOT v.gender == "Male";

does not compile. cannot use NOT operator in combination with type attribute
females = SELECT v FROM all_vertices:v
WHERE NOT v.type == "Post" AND
NOT v.gender == "Male"; */
females = SELECT v FROM (v:all_vertices)
WHERE NOT v.type == "Post" AND
NOT v.gender == "Male";

person_vertices = {Person.*};
females = SELECT v FROM person_vertices:v
WHERE NOT v.gender == "Male";
females = SELECT v FROM (person_vertices:v)
WHERE NOT v.gender == "Male";

females = SELECT v FROM person_vertices:v
WHERE v.gender != "Male";
females = SELECT v FROM (person_vertices:v)
WHERE v.gender != "Male";

females = SELECT v FROM person_vertices:v
WHERE v.gender != "Male" AND true;
females = SELECT v FROM (person_vertices:v)
WHERE v.gender != "Male" AND true;

females = SELECT v FROM person_vertices:v
WHERE v.gender != "Male" OR false;
females = SELECT v FROM (person_vertices:v)
WHERE v.gender != "Male" OR false;

PRINT females;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
CREATE QUERY multiple_edge_type_where_ex(VERTEX<Person> m1) FOR GRAPH Social_Net {
all_user = {m1};
filtered_user = SELECT s
FROM all_user:s - ((Posted|Liked|Friend):e) - (Post|Person):t
FROM (s:all_user) -[e:Posted|Liked|Friend]-> (t:Post|Person)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Posted and Liked are directed edge types -[ ]->
Friend is an undirected edge type -[ ]-
Please check the documentation for what is the right way to handle a mixed set of edge types.

// WHERE e.action_time > epoch_to_datetime(1) AND t.gender == "Male";
WHERE ( e.type == "Liked" AND e.action_time > epoch_to_datetime(1) ) OR
( e.type == "Friend" AND t.gender == "Male" );
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
CREATE QUERY find_graph_focused_posts() FOR GRAPH Social_Net {
results = SELECT v FROM Post:v // select only post vertices
WHERE v.subject IN ("Graph", "tigergraph"); // which have a subject of either 'Graph' or 'tigergraph'
PRINT results;
results = SELECT v FROM (v:Post) // select only post vertices
WHERE v.subject IN ("Graph", "tigergraph"); // which have a subject of either 'Graph' or 'tigergraph'
PRINT results;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ CREATE QUERY sample_ex_1() FOR GRAPH Work_Net {
// the 'before_sample' result set encapsulates the normal functionality of
// a SELECT statement, where 'times_traversed_no_sample' vertex accumulator is increased for
// each edge incident to the vertex.
before_sample = SELECT v FROM workers:t -(:e)- :v
before_sample = SELECT v FROM (t:workers) -[e]- (v)
ACCUM v.@times_traversed_no_sample += 1;

// The 'after_sample' result set is formed by those vertices which can be
// reached when for each source vertex, only one edge is used for traversal.
// This is demonstrated by the values of 'times_traversed_with_sample' vertex accumulator, which
// is increased for each edge incident to the vertex which is used in the
// sample.
after_sample = SELECT v FROM workers:t -(:e)- :v
after_sample = SELECT v FROM (t:workers) -[e]- (v)
SAMPLE 1 EDGE WHEN t.outdegree() >= 1 // only use 1 edge from the source vertex
ACCUM v.@times_traversed_with_sample += 1;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ CREATE QUERY resident_employees() FOR GRAPH Work_Net {

start = {Person.*};

employees = SELECT s FROM start:s -(Works_For)- :c
employees = SELECT s FROM (s:start) -[:Works_For]- (c)
// If a person works for a company in the same country where they live, add the company to the list
ACCUM CASE
WHEN (s.location_id == c.country) THEN
Expand All @@ -22,4 +22,4 @@ CREATE QUERY resident_employees() FOR GRAPH Work_Net {
END;

PRINT employees WHERE (employees.@works_and_lives == TRUE);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
CREATE QUERY full_time_workers() FOR GRAPH Work_Net {
// find all workers who are full time at some company
start = {Person.*};
full_time_workers = SELECT v FROM start:v -(Works_For:e)- Company:t
full_time_workers = SELECT v FROM (v:start) -[e:Works_For]- (t:Company)
WHERE e.full_time; // full_time is a boolean attribute on the edge

PRINT full_time_workers;
Expand Down
Binary file added modules/querying/pages/img.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading