diff --git a/aql/convertQuery.go b/aql/convertQuery.go index 03334a8ec8e85eb74fca5d69b1ebc9806fef4ea3..d9c374ebfe78528a76b7692d5eb2e108b43a2485 100644 --- a/aql/convertQuery.go +++ b/aql/convertQuery.go @@ -115,11 +115,12 @@ func relationToQuery(element entity.QueryRelationStruct, JSONQuery *entity.Incom if len(filters) > 0 { for i := range filters { filter := filters[i] - 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 { + filter2 := filter + for filter2.FromType == "filter" { + filters2 := tryGetFilterTo("filter", filter.ID, JSONQuery) + filter2 = filters2[0] + } + if filter2.FromType == element.FromType && filter2.FromID == element.FromID { ret += fmt.Sprintf("\tFOR y in f%v\n", filter.ID) ydefined = true } else { @@ -154,7 +155,14 @@ func functionToQuery(element entity.QueryGroupByStruct, JSONQuery *entity.Incomi 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)) + var filteredpill string + filters := tryGetFilterTo("filter", element.ID, JSONQuery) + if len(filters) > 0 { + filteredpill = fmt.Sprintf("f%v", filters[0].ID) + } else { + filteredpill = fmt.Sprintf("%v%v", typeToPrefix(element.FromType), element.FromID) + } + ret := createLetFor(thisname, filteredpill) if element.FromType == "groupBy" { ret += fmt.Sprintf("\tFILTER x.modifier %v %v\n", wordsToLogicalSign((element.MatchType)), element.Value) } else { @@ -242,7 +250,7 @@ func createGroupBy(element entity.QueryGroupByStruct, JSONQuery *entity.Incoming 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" + result += "\tRETURN {\n\t_id: c,\n\tmodifier: variable_0\n\t}\n)\n" return result } diff --git a/main/main.go b/main/main.go index b256d07c8f0aa4e471382388213c9cd723ac3e1a..b73a9169ffdf08d8833b41952f7247468acd12c4 100644 --- a/main/main.go +++ b/main/main.go @@ -20,7 +20,7 @@ The main function that calls the appropriate functions */ func main() { queryservice := aql.NewService() - jsonFile, err := os.Open("../test2.json") + jsonFile, err := os.Open("../test3.json") // if we os.Open returns an error then handle it if err != nil { log.Println(err) diff --git a/test3.json b/test3.json new file mode 100644 index 0000000000000000000000000000000000000000..93861fb8dff85a84dbfaeb3c02ef1de0410e29b4 --- /dev/null +++ b/test3.json @@ -0,0 +1,67 @@ +{ + "return": { + "entities": [ + 0, + 1 + ], + "relations": [ + 0 + ] + }, + "entities": [ + { + "ID": 0, + "name": "parliament" + }, + { + "ID": 1, + "name": "parties" + } + ], + "relations": [ + { + "ID": 0, + "name": "member_of", + "depth": { + "min": 1, + "max": 1 + }, + "fromType": "entity", + "fromID": 0, + "toType": "entity", + "toID": 1 + } + ], + "groupBys": [], + "filters": [ + { + "ID": 0, + "fromType": "entity", + "fromID": 0, + "toType": "filter", + "toID": 1, + "attribute": "age", + "value": "40", + "dataType": "number", + "matchType": "GT", + "inType": "", + "inID": 0 + }, + { + "ID": 1, + "fromType": "filter", + "fromID": 0, + "toType": "relation", + "toID": 0, + "attribute": "seniority", + "value": "3000", + "dataType": "number", + "matchType": "GT", + "inType": "", + "inID": 0 + } + ], + "limit": 5000, + "modifiers": [], + "databaseName": "Tweede Kamer Dataset" +} \ No newline at end of file