From b863e73401c587d91f3f0cf3aaccdf68c1e00437 Mon Sep 17 00:00:00 2001 From: Kieran van Gaalen <kieran.van.gaalen@casema.nl> Date: Thu, 4 Nov 2021 14:57:09 +0100 Subject: [PATCH] Chaining and nesting done, some issues remain, these are documented in samenwerken met joris --- aql/convertQuery.go | 38 +++++++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 11 deletions(-) diff --git a/aql/convertQuery.go b/aql/convertQuery.go index 53f9285..5663215 100644 --- a/aql/convertQuery.go +++ b/aql/convertQuery.go @@ -71,7 +71,7 @@ func createQuery(JSONQuery *entity.IncomingQueryJSON) *string { case "relation": relation := JSONQuery.Relations[element.pointer] query += relationToQuery(relation, JSONQuery) - case "function": + case "groupBy": function := JSONQuery.GroupBys[element.pointer] query += functionToQuery(function, JSONQuery, list == len(listoflists)-1) case "filter": @@ -112,7 +112,11 @@ func relationToQuery(element entity.QueryRelationStruct, JSONQuery *entity.Incom if len(filters) > 0 { for i := range filters { filter := filters[i] - if filter.FromID == element.FromID { + fmt.Println(filter.FromID) + fmt.Println(element.FromID) + fmt.Println(filter.FromType) + fmt.Println(element.FromType) + if filter.FromType == element.FromType && filter.FromID == element.FromID { ret += fmt.Sprintf("\tFOR y in f%v\n", filter.ID) ydefined = true } else { @@ -137,14 +141,22 @@ func relationToQuery(element entity.QueryRelationStruct, JSONQuery *entity.Incom func functionToQuery(element entity.QueryGroupByStruct, JSONQuery *entity.IncomingQueryJSON, final bool) string { ret := getTupleVar(element, JSONQuery) - ret += createGroupBy(element, JSONQuery, final) + if final { + ret += createFinalGroupBy(element, JSONQuery) + } else { + ret += createGroupBy(element, JSONQuery) + } return ret } func filterToQuery(element entity.QueryFilterStruct, JSONQuery *entity.IncomingQueryJSON) string { thisname := fmt.Sprintf("f%v", element.ID) ret := createLetFor(thisname, fmt.Sprintf("%v%v", typeToPrefix(element.FromType), element.FromID)) - ret += fmt.Sprintf("\tFILTER x.%v %v %v\n", element.Attribute, wordsToLogicalSign((element.MatchType)), element.Value) + if element.FromType == "groupBy" { + ret += fmt.Sprintf("\tFILTER x.modifier %v %v\n", wordsToLogicalSign((element.MatchType)), element.Value) + } else { + ret += fmt.Sprintf("\tFILTER x.%v %v %v\n", element.Attribute, wordsToLogicalSign((element.MatchType)), element.Value) + } ret += "\tRETURN x\n)\n" return ret } @@ -211,7 +223,7 @@ func getTupleVar(element entity.QueryGroupByStruct, JSONQuery *entity.IncomingQu thisname := fmt.Sprintf("gt%v", element.ID) result += createLetFor(thisname, JSONQuery.Relations[element.RelationID].Name) result += createSubVariable("variable_0", "variable_1", fmt.Sprintf("r%v[**].vertices[1]", element.RelationID), "_id", "x._to", "_id") - result += createSubVariable("variable_2", "variable_3", fmt.Sprintf("%v%v", typeToPrefix(element.GroupType), element.GroupID), "_id", "x._to", element.GroupAttribute) + result += createSubVariable("variable_2", "variable_3", fmt.Sprintf("%v%v", typeToPrefix(element.GroupType), element.GroupID), "_id", "x._from", element.GroupAttribute) result += "\tRETURN {\n\t\t\"variable_0\": variable_1, \n\t\t\"variable_1\": variable_3\n\t}\n)\n" return result } @@ -222,22 +234,26 @@ func createSubVariable(variableName string, variableName2 string, forName string "\n\tLET " + variableName2 + " = " + variableName + "[0] \n" } -func createGroupBy(element entity.QueryGroupByStruct, JSONQuery *entity.IncomingQueryJSON, final bool) string { +func createGroupBy(element entity.QueryGroupByStruct, JSONQuery *entity.IncomingQueryJSON) string { thisname := fmt.Sprintf("g%v", element.ID) tuplename := fmt.Sprintf("gt%v", element.ID) result := createLetFor(thisname, tuplename) result += createCollect(element) + result += "\tRETURN {\n\t_id: c,\n\t\"modifier\": variable_0\n\t}\n)\n" + return result +} + +func createFinalGroupBy(element entity.QueryGroupByStruct, JSONQuery *entity.IncomingQueryJSON) string { + tuplename := fmt.Sprintf("gt%v", element.ID) + result := "FOR x IN " + tuplename + "\n" + result += createCollect(element) filters := tryGetFilterFrom("groupBy", element.ID, JSONQuery) if len(filters) > 0 { for i := range filters { result += createFilter(filters[i]) } } - if final { - result += fmt.Sprintf("\tRETURN {\n\tname: c,\n\t%v: variable_0\n\t}\n)\n", element.GroupAttribute) - } else { - result += "\tRETURN c\n)\n" - } + result += fmt.Sprintf("\tRETURN {\n\tname: c,\n\t%v: variable_0\n\t}\n)\n", element.GroupAttribute) return result } -- GitLab