From b2c6fe20a12282419c4a89f7a2cf12b8e38ca7f4 Mon Sep 17 00:00:00 2001
From: Kieran van Gaalen <kieran.van.gaalen@casema.nl>
Date: Fri, 12 Nov 2021 13:53:19 +0100
Subject: [PATCH] Fixed topnode, also rip groupby support

---
 aql/convertQuery2.go | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/aql/convertQuery2.go b/aql/convertQuery2.go
index 59346d4..30db4b8 100644
--- a/aql/convertQuery2.go
+++ b/aql/convertQuery2.go
@@ -49,10 +49,11 @@ func (s *Service) ConvertQuery(JSONQuery *entity.IncomingQueryJSON) (*string, er
 	}
 	// Don't run search if we are getting empty queries from unit tests
 	var tree []entity.Tree
+	var topNode entity.QueryEntityStruct
 	if len(JSONQuery.Entities) != 0 && len(JSONQuery.Relations) != 0 {
-		tree = search(JSONQuery, 0)
+		tree, topNode = search(JSONQuery, 0)
 	}
-	result := createQuery(JSONQuery, tree)
+	result := createQuery(JSONQuery, tree, topNode)
 	return result, nil
 }
 
@@ -61,20 +62,19 @@ createQuery generates a query based on the json file provided
 	JSONQuery: *entity.IncomingQueryJSON, this is a parsedJSON struct holding all the data needed to form a query,
 	Return: *string, a string containing the corresponding AQL query and an error
 */
-func createQuery(JSONQuery *entity.IncomingQueryJSON, tree []entity.Tree) *string {
-	currentTree := tree[0]
-	output := createLetFor("result", fmt.Sprintf("e_%v", currentTree.Self.In.ID), currentTree.Self.In.Name)
-	for constraint := range currentTree.Self.In.Constraints {
-		output += createFilter(currentTree.Self.In.Constraints[constraint], fmt.Sprintf("e_%v", currentTree.Self.In.ID))
+func createQuery(JSONQuery *entity.IncomingQueryJSON, tree []entity.Tree, topNode entity.QueryEntityStruct) *string {
+	output := createLetFor("result", fmt.Sprintf("e_%v", topNode.ID), topNode.Name)
+	for constraint := range topNode.Constraints {
+		output += createFilter(topNode.Constraints[constraint], fmt.Sprintf("e_%v", topNode.ID))
 	}
 	var subNames []string
-	for i := range currentTree.Children {
-		subQuery, subName := createQueryRecurse(JSONQuery, tree, currentTree.Children[i])
+	for i := range tree[0].Children {
+		subQuery, subName := createQueryRecurse(JSONQuery, tree, tree[0].Children[i])
 		output += subQuery
 		subNames = append(subNames, subName)
 	}
-	output += createZeroFilter(append(subNames, fmt.Sprintf("e_%v", currentTree.Self.In.ID)))
-	output += createReturn(fmt.Sprintf("e_%v", currentTree.Self.In.ID), "", subNames)
+	output += createZeroFilter(append(subNames, fmt.Sprintf("e_%v", topNode.ID)))
+	output += createReturn(fmt.Sprintf("e_%v", topNode.ID), "", subNames)
 	output += "let nodes = union_distinct(flatten(result[**].nodes),[])\nlet edges = union_distinct(flatten(result[**].rel),[])\nreturn {\"vertices\":nodes,\"edges\":edges}"
 	return &output
 }
-- 
GitLab