diff --git a/CHANGELOG.md b/CHANGELOG.md index e3fce80..88b4f1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm - Switched to gcube-smartgears-bom 3.0.0 +## [v4.1.1] + +- Fixed bug on JSONQuery for Facets which does not have any properties to match [#24237] + ## [v4.1.0-SNAPSHOT] diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/JsonQuery.java b/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/JsonQuery.java index 34b3d0e..d1f5c29 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/JsonQuery.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/JsonQuery.java @@ -120,7 +120,10 @@ public class JsonQuery { Map map = new HashMap<>(); map.put("limit", JsonQuery.UNBOUNDED_LIMIT); - OResultSet resultSet = oDatabaseDocument.query(stringBuffer.toString(), map); + String query = stringBuffer.toString(); + logger.trace("Going to execute the following query:\n{} \n from the JSONQuery\n{}", query, objectMapper.writeValueAsString(jsonQuery)); + + OResultSet resultSet = oDatabaseDocument.query(query, map); ArrayNode arrayNode = objectMapper.createArrayNode(); diff --git a/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/base/entities/JsonQueryFacet.java b/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/base/entities/JsonQueryFacet.java index 4878784..4e94d47 100644 --- a/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/base/entities/JsonQueryFacet.java +++ b/src/main/java/org/gcube/informationsystem/resourceregistry/queries/json/base/entities/JsonQueryFacet.java @@ -24,6 +24,8 @@ public class JsonQueryFacet extends JsonQueryEntity { public StringBuffer analize(StringBuffer stringBuffer) throws SchemaException, ResourceRegistryException { StringBuffer newBuffer = new StringBuffer(); + int size = jsonNode.size(); + boolean entry = entryPoint; if(jsonNode.has(_IN)) { if(!entryPoint) { @@ -35,9 +37,14 @@ public class JsonQueryFacet extends JsonQueryEntity { jsonQueryConsistsOf.setDirection(Direction.OUT); stringBuffer = jsonQueryConsistsOf.analize(stringBuffer); entry = false; + + /* Need to substract 1 from size otherwise + * it add WHERE at the end because _in + * is not a property to be used for a WHERE compare + */ + --size; } - int size = jsonNode.size(); newBuffer.append("SELECT FROM "); if(!entry) { diff --git a/src/test/java/org/gcube/informationsystem/resourceregistry/queries/JsonQueryTest.java b/src/test/java/org/gcube/informationsystem/resourceregistry/queries/JsonQueryTest.java index c9d8ee4..b074f6c 100644 --- a/src/test/java/org/gcube/informationsystem/resourceregistry/queries/JsonQueryTest.java +++ b/src/test/java/org/gcube/informationsystem/resourceregistry/queries/JsonQueryTest.java @@ -66,7 +66,7 @@ public class JsonQueryTest extends ContextTest { @Test public void testSingleCreateQuery() throws Exception { File queriesDirectory = getQueriesDirectory(); - File jsonQueryFile = new File(queriesDirectory, "query5.json"); + File jsonQueryFile = new File(queriesDirectory, "query7.json"); ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = objectMapper.readTree(jsonQueryFile); logger.info("Going to test the following JSON query {}", jsonNode.toString());