From 4621c186339a502d7fa010cef5376a03825c7c1f Mon Sep 17 00:00:00 2001 From: thijsheijden <hi@thijsheijden.nl> Date: Tue, 20 Apr 2021 15:45:44 +0200 Subject: [PATCH] Added check to make sure entityFrom and entityTo can be less than -1 --- internal/usecases/convertquery/aql.go | 14 ++----- internal/usecases/convertquery/aql_test.go | 48 ++++++++++++++++++++++ 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/internal/usecases/convertquery/aql.go b/internal/usecases/convertquery/aql.go index e6678f8..f2bf420 100644 --- a/internal/usecases/convertquery/aql.go +++ b/internal/usecases/convertquery/aql.go @@ -92,25 +92,19 @@ func createQuery(jsonQuery *entity.QueryParsedJSON) *string { for i, relation := range jsonQuery.Relations { relationName := fmt.Sprintf("r%v", i) - if relation.EntityFrom != -1 { + if relation.EntityFrom >= 0 { // if there is a from-node // create the let for this node fromName := fmt.Sprintf("n%v", relation.EntityFrom) - // Check if this entity index exists - if entity := &jsonQuery.Entities[relation.EntityFrom]; entity != nil { - ret += *createNodeLet(entity, &fromName) - } + ret += *createNodeLet(&jsonQuery.Entities[relation.EntityFrom], &fromName) ret += *createRelationLetWithFromEntity(&relation, relationName, &jsonQuery.Entities, jsonQuery.Limit) - } else if relation.EntityTo != -1 { + } else if relation.EntityTo >= 0 { // if there is only a to-node toName := fmt.Sprintf("n%v", relation.EntityTo) - // Check if this entity index exists - if entity := &jsonQuery.Entities[relation.EntityTo]; entity != nil { - ret += *createNodeLet(entity, &toName) - } + ret += *createNodeLet(&jsonQuery.Entities[relation.EntityTo], &toName) ret += *createRelationLetWithOnlyToEntity(&relation, relationName, &jsonQuery.Entities, jsonQuery.Limit) // Add this relation to the list diff --git a/internal/usecases/convertquery/aql_test.go b/internal/usecases/convertquery/aql_test.go index d025bc5..13f2c75 100644 --- a/internal/usecases/convertquery/aql_test.go +++ b/internal/usecases/convertquery/aql_test.go @@ -550,3 +550,51 @@ func TestNoRelationsField(t *testing.T) { cleanedResult = strings.ReplaceAll(cleanedResult, "\t", "") assert.Equal(t, correctConvertedResult, cleanedResult) } + +func TestEntityFromLowerThanNegativeOneInRelation(t *testing.T) { + // Setup for test + // Create query conversion service + service := NewService() + + query := []byte(`{ + "return": { + "entities": [ + 0 + ], + "relations": [ + 0 + ] + }, + "entities": [ + { + "type": "airports", + "constraints": [ + { + "attribute": "city", + "value": "San Francisco", + "dataType": "text", + "matchType": "exact" + } + ] + } + ], + "relations": [ + { + "type": "flights", + "depth": { + "min": 1, + "max": 1 + }, + "entityFrom": -4, + "entityTo": 0, + "constraints": [] + } + ], + "limit": 5000 + }`) + + _, err := service.ConvertQuery(&query) + + // Assert that there is no error + assert.NoError(t, err) +} -- GitLab