diff --git a/internal/entity/JSONQuery.go b/internal/entity/JSONQuery.go new file mode 100644 index 0000000000000000000000000000000000000000..ec04a6e7e28e15a806060d4ab5cabf54def159f2 --- /dev/null +++ b/internal/entity/JSONQuery.go @@ -0,0 +1,60 @@ +package entity + +// IncomingQueryJSON describes the query coming into the service in JSON format +type IncomingQueryJSON struct { + DatabaseName string + Return QueryReturnStruct + Entities []QueryEntityStruct + Relations []QueryRelationStruct + // Limit is for limiting the amount of paths AQL will return in a relation let statement + Limit int + Modifiers []QueryModifierStruct +} + +// QueryReturnStruct holds the indices of the entities and relations that need to be returned +type QueryReturnStruct struct { + Entities []int + Relations []int + //Modifiers []int +} + +// QueryEntityStruct encapsulates a single entity with its corresponding constraints +type QueryEntityStruct struct { + Type string + Constraints []QueryConstraintStruct +} + +// QueryRelationStruct encapsulates a single relation with its corresponding constraints +type QueryRelationStruct struct { + Type string + EntityFrom int + EntityTo int + Depth QuerySearchDepthStruct + Constraints []QueryConstraintStruct +} + +// QueryModifierStruct encapsulates a single modifier with its corresponding constraints +type QueryModifierStruct struct { + Type string // SUM COUNT AVG + SelectedType string // node relation + ID int // ID of the enitity or relation + AttributeIndex int // = -1 if its the node or relation, = > -1 if an attribute is selected +} + +// QuerySearchDepthStruct holds the range of traversals for the relation +type QuerySearchDepthStruct struct { + Min int + Max int +} + +// QueryConstraintStruct holds the information of the constraint +// Constraint datatypes +// text MatchTypes: exact/contains/startswith/endswith +// number MatchTypes: GT/LT/EQ +// bool MatchTypes: EQ/NEQ +type QueryConstraintStruct struct { + Attribute string + Value string + DataType string + MatchType string +}