Skip to content
Snippets Groups Projects
Commit b863e734 authored by Kieran van Gaalen's avatar Kieran van Gaalen
Browse files

Chaining and nesting done, some issues remain, these are documented in samenwerken met joris

parent cfe2f0ce
No related branches found
No related tags found
1 merge request!1Big merge
......@@ -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
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment