-
-
Save maxdemarzi/1f187f24d6e5e2df012305f9b3c97c34 to your computer and use it in GitHub Desktop.
GSQL version of IS-2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use graph ldbc | |
drop query i_short_2 | |
create query i_short_2(INT vid) for graph ldbc { | |
SetAccum<INT> @@postSet; | |
SetAccum<INT> @@commentsSet; | |
SetAccum<INT> @@creatorSet; | |
SetAccum<INT> @@messageSet; | |
SetAccum<INT> @@replySet; | |
SetAccum<INT> @@postFromReplySet; | |
SetAccum<INT> @@replyToPostSet; | |
SumAccum<INT> @@current; | |
SetAccum<INT> @@resultID; | |
SetAccum<INT> @@visitedSet; | |
SumAccum<INT> @postID; | |
SumAccum<INT> @creatorID; | |
SumAccum<STRING> @creatorFirst; | |
SumAccum<STRING> @creatorLast; | |
INT tempMessageID; | |
INT tempCreator; | |
STRING tempFirst; | |
STRING tempLast; | |
INT postID; | |
INT tempPostID; | |
INT length; | |
INT size; | |
INT cur; | |
Person = {person.*}; | |
Creator = {person.*}; | |
Message = {post.*, comments.*}; | |
Prev = {comments.*}; | |
Post = {post.*}; | |
Comments ={comments.*}; | |
Reply = {comments.*}; | |
Reply1 ={comments.*}; | |
ReplyToPost = {comments.*}; | |
Result = {post.*, comments.*}; | |
CurrentReply = {comments.*}; | |
length = Comments.size(); | |
//get person from vid | |
Person = SELECT s | |
FROM Person:s | |
WHERE s.id == vid; | |
//get latest message | |
Message = SELECT s | |
FROM Message:s-((post_hasCreator_person|comments_hasCreator_person):e)->person:t | |
WHERE t.id == vid | |
ORDER BY s.creationDate DESC | |
LIMIT 10; | |
Message = SELECT s FROM Message:s | |
ACCUM @@messageSet += s.id, | |
@@visitedSet += s.id; | |
PostSet = SELECT s FROM Message:s-(post_hasCreator_person)->:t | |
ACCUM @@postSet += s.id; | |
// PRINT PostTest; | |
//get comment in message | |
Reply = SELECT s | |
FROM Message:s-(comments_hasCreator_person)->:t | |
WHERE t.id == vid | |
ACCUM @@replySet += s.id, | |
@@visitedSet += s.id; | |
Reply1 = SELECT s FROM Comments:s WHERE s.id IN @@replySet; | |
// PRINT Reply1, @@replySet; | |
ReplyToPost = SELECT s FROM Reply1:s-(comments_replyOf_post)->:t | |
ACCUM @@replyToPostSet += s.id, | |
@@visitedSet += s.id; | |
// PRINT @@replyToPostSet; | |
// PRINT ReplyToPost, @@replyToPostSet; | |
// //for each comment in message, get 1 hop comment to post | |
FOREACH item IN @@replySet DO | |
IF item != -1 THEN | |
CurrentReply = SELECT s FROM Reply1:s WHERE s.id == item; | |
//PRINT CurrentReply; | |
size = CurrentReply.size(); | |
WHILE size != 0 LIMIT 100 DO | |
Prev = SELECT s FROM CurrentReply:s ACCUM cur = s.id; | |
CurrentReply = SELECT t | |
FROM Comments:s-(comments_replyOf_comments)->:t | |
WHERE s.id == cur | |
ACCUM @@visitedSet += t.id; | |
size = CurrentReply.size(); | |
IF size == 0 THEN BREAK; END; | |
END; | |
CurrentReply = SELECT s | |
FROM Prev:s | |
ACCUM @@replyToPostSet += s.id; | |
//PRINT CurrentReply; | |
END; | |
END; | |
// PRINT @@replyToPostSet; | |
// | |
//get post from 1 hop comment | |
Post = SELECT s | |
FROM Post:s-(comments_replyOf_post_reverse)->:t | |
WHERE t.id IN @@replyToPostSet | |
ACCUM @@postFromReplySet += s.id; | |
// PRINT Post; | |
//get post creator info | |
Post = SELECT s | |
FROM Post:s-(post_hasCreator_person)->:t | |
ACCUM s.@creatorID = t.id, | |
s.@creatorFirst = t.firstName, | |
s.@creatorLast = t.lastName; | |
// PRINT Post; | |
//pass person info and postID to 1 hop comment | |
ReplyToPost = SELECT t | |
FROM Post:s-(comments_replyOf_post_reverse)->:t | |
ACCUM t.@postID = s.id, | |
t.@creatorID = s.@creatorID, | |
t.@creatorFirst = s.@creatorFirst, | |
t.@creatorLast = s.@creatorLast, | |
@@replyToPostSet += t.id; | |
// PRINT ReplyToPost; | |
// //the foreach block pass person info and postID to visited comments in post | |
FOREACH item IN @@replyToPostSet DO | |
IF item != 0 THEN | |
Temp = SELECT s FROM ReplyToPost:s WHERE s.id == item | |
ACCUM tempMessageID = s.id, | |
tempCreator = s.@creatorID, | |
tempFirst = s.@creatorFirst, | |
tempLast = s.@creatorLast, | |
tempPostID = s.@postID; | |
// | |
//// //save person info and PostID from 1 kop comments to message set | |
Result = SELECT s | |
FROM Result:s | |
WHERE s.id IN @@visitedSet | |
ACCUM CASE WHEN s.id == item THEN | |
s.@creatorID = tempCreator, | |
s.@creatorFirst = tempFirst, | |
s.@creatorLast = tempLast, | |
s.@postID = tempPostID, | |
@@resultID += s.id | |
END; | |
size = Temp.size(); | |
//filter result set by visited comments | |
Result = SELECT s FROM Result:s WHERE s.id IN @@visitedSet; | |
// PRINT tempCreator; | |
// PRINT "-----------------debug--------------------"; | |
// | |
// PRINT Result; | |
// | |
// PRINT "------debug-----"; | |
//pass post creator info to all visited comment | |
WHILE size != 0 LIMIT 100 DO | |
TempReplyTemp= SELECT t | |
FROM Temp:s-(comments_replyOf_comments_reverse)->:t | |
ACCUM tempMessageID = s.@creatorID, | |
tempFirst = s.@creatorFirst, | |
tempLast = s.@creatorLast, | |
tempPostID = s.@postID; | |
IF TempReplyTemp.size() == 1 THEN | |
Result = SELECT s | |
FROM Result:s | |
ACCUM CASE WHEN s.id == tempMessageID THEN | |
s.@creatorID = tempCreator, | |
s.@creatorFirst = tempFirst, | |
s.@creatorLast = tempLast, | |
s.@postID = postID | |
END; | |
size = TempReplyTemp.size(); | |
END; | |
END; | |
END; | |
END; | |
// | |
// | |
// | |
// PRINT "---------------Result-------------------------"; | |
//pass post creator to post in message set | |
FOREACH item IN @@postSet DO | |
IF item != -1 THEN | |
TempPost = SELECT s | |
FROM Result:s-(post_hasCreator_person)->:t | |
WHERE s.id == item | |
ACCUM tempCreator = t.id, | |
tempFirst = t.firstName, | |
tempLast = t.lastName; | |
Result = SELECT s FROM Result:s | |
ACCUM CASE WHEN s.id IN @@postSet THEN | |
s.@postID = s.id, | |
s.@creatorID = tempCreator, | |
s.@creatorFirst = tempFirst, | |
s.@creatorLast = tempLast | |
END; | |
END; | |
END; | |
Result = SELECT s FROM Result:s | |
WHERE s.id IN @@messageSet | |
Order by s.creationDate DESC, s.id DESC; | |
PRINT Result.id, Result.content, Result.imageFile, Result.creationDate, Result.@postID, Result.@creatorID, Result.@creatorFirst, Result.@creatorLast; | |
} | |
install query i_short_2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment