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

Actual querystruct changes and added tabs

parent 7de47fce
No related branches found
No related tags found
1 merge request!1Big merge
...@@ -65,47 +65,92 @@ func createQuery(JSONQuery *entity.IncomingQueryJSON) *string { ...@@ -65,47 +65,92 @@ func createQuery(JSONQuery *entity.IncomingQueryJSON) *string {
switch element.typename { switch element.typename {
case "entity": case "entity":
entity := JSONQuery.Entities[element.pointer] entity := JSONQuery.Entities[element.pointer]
query += entityToQuery(entity) query += entityToQuery(entity, JSONQuery)
case "relation": case "relation":
relation := JSONQuery.Relations[element.pointer] relation := JSONQuery.Relations[element.pointer]
query += relationToQuery(relation) query += relationToQuery(relation, JSONQuery)
case "function": case "function":
function := JSONQuery.GroupBys[element.pointer] function := JSONQuery.GroupBys[element.pointer]
query += functionToQuery(function) query += functionToQuery(function, JSONQuery)
case "filter": case "filter":
filter := JSONQuery.Filters[element.pointer] filter := JSONQuery.Filters[element.pointer]
query += filterToQuery(filter) query += filterToQuery(filter, JSONQuery)
} }
} }
} }
return &query
} }
func entityToQuery(element entity.QueryEntityStruct) string { func entityToQuery(element entity.QueryEntityStruct, JSONQuery *entity.IncomingQueryJSON) string {
thisname := fmt.Sprintf("e%v", element.ID) thisname := fmt.Sprintf("e%v", element.ID)
ret := createLetFor(thisname, element.Name) ret := createLetFor(thisname, element.Name)
ret += "RETURN x\n)" ret += "\tRETURN x\n)"
return ret return ret
} }
func relationToQuery(element entity.QueryRelationStruct) string { func relationToQuery(element entity.QueryRelationStruct, JSONQuery *entity.IncomingQueryJSON) string {
thisname := fmt.Sprintf("e%v", element.ID) thisname := fmt.Sprintf("r%v", element.ID)
ret := createLetFor(thisname, element.Name) ret := createLetFor(thisname, element.Name)
ret += fmt.Sprintf("\tFOR y in %v%v\n")
return ret return ret
} }
func functionToQuery(element entity.QueryGroupByStruct) string { func functionToQuery(element entity.QueryGroupByStruct, JSONQuery *entity.IncomingQueryJSON) string {
thisname := fmt.Sprintf("e%v", element.ID) thisname := fmt.Sprintf("g%v", element.ID)
element element
ret := createLetFor(thisname) ret := createLetFor(thisname)
return ret return ret
} }
func filterToQuery(element entity.QueryFilterStruct) string { func filterToQuery(element entity.QueryFilterStruct, JSONQuery *entity.IncomingQueryJSON) string {
thisname := fmt.Sprintf("e%v", element.ID) thisname := fmt.Sprintf("f%v", element.ID)
ret := createLetFor(thisname, fmt.Sprintf("e%v", element.FilteredID)) 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)
ret += "\tRETURN x\n)"
return ret return ret
} }
func createLetFor(variableName string, enumerableName string) string { func createLetFor(variableName string, enumerableName string) string {
return "LET " + variableName + " = (\n\tFOR x IN " + enumerableName + "\n" return "LET " + variableName + " = (\n\tFOR x IN " + enumerableName + "\n"
} }
func typeToPrefix(pillType string) string {
switch pillType {
case "entity":
return "e"
case "relation":
return "r"
case "function":
return "g"
case "filter":
return "f"
default:
return ""
}
}
func tryGetFilter(toType string, toID int, JSONQuery *entity.IncomingQueryJSON) *entity.QueryFilterStruct {
for i := range JSONQuery.Filters {
filter := JSONQuery.Filters[i]
if filter.ToType == toType && filter.ToID == toID {
return &filter
}
}
return nil
}
func wordsToLogicalSign(word string) string {
if word == "LT" {
return "<"
} else if word == "LTE" {
return "<="
} else if word == "EQ" {
return "=="
} else if word == "GTE" {
return ">="
} else if word == "NEQ" {
return "!="
} else {
return ">"
}
}
...@@ -51,15 +51,17 @@ type QueryGroupByStruct struct { ...@@ -51,15 +51,17 @@ type QueryGroupByStruct struct {
} }
type QueryFilterStruct struct { type QueryFilterStruct struct {
ID int ID int
FilteredType string FromType string
FilteredID int FromID int
Attribute string ToType string
DataType string ToID int
MatchType string Attribute string
Value string DataType string
InType string MatchType string
InID int Value string
InType string
InID int
} }
// QueryModifierStruct encapsulates a single modifier with its corresponding constraints // QueryModifierStruct encapsulates a single modifier with its corresponding constraints
......
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