From 625c200189768adeddfdf3146bdf7c1d3181882b Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 7 Nov 2024 17:47:36 +0100 Subject: [PATCH 1/4] added untyped explainAqlQuery --- .../java/com/arangodb/ArangoDatabase.java | 15 ++ .../entity/AqlQueryExplainEntity.java | 147 ++++++++++++++++++ .../arangodb/internal/ArangoDatabaseImpl.java | 5 + .../model/AqlQueryExplainOptions.java | 14 +- .../java/com/arangodb/ArangoDatabaseTest.java | 110 +++++++++++++ 5 files changed, 290 insertions(+), 1 deletion(-) create mode 100644 core/src/main/java/com/arangodb/entity/AqlQueryExplainEntity.java diff --git a/core/src/main/java/com/arangodb/ArangoDatabase.java b/core/src/main/java/com/arangodb/ArangoDatabase.java index 1c7653360..9ef0327a5 100644 --- a/core/src/main/java/com/arangodb/ArangoDatabase.java +++ b/core/src/main/java/com/arangodb/ArangoDatabase.java @@ -363,9 +363,24 @@ public interface ArangoDatabase extends ArangoSerdeAccessor { * @return information about the query * @see API * Documentation + * + * @deprecated for removal, use {@link ArangoDatabase#explainAqlQuery(String, Map, AqlQueryExplainOptions)} instead */ + @Deprecated AqlExecutionExplainEntity explainQuery(String query, Map bindVars, AqlQueryExplainOptions options); + /** + * Explain an AQL query and return information about it + * + * @param query the query which you want explained + * @param bindVars key/value pairs representing the bind parameters + * @param options Additional options, can be null + * @return information about the query + * @see API + * Documentation + */ + AqlQueryExplainEntity explainAqlQuery(String query, Map bindVars, AqlQueryExplainOptions options); + /** * Parse an AQL query and return information about it This method is for query validation only. To actually query * the database, see {@link ArangoDatabase#query(String, Class, Map, AqlQueryOptions)} diff --git a/core/src/main/java/com/arangodb/entity/AqlQueryExplainEntity.java b/core/src/main/java/com/arangodb/entity/AqlQueryExplainEntity.java new file mode 100644 index 000000000..cc200bfda --- /dev/null +++ b/core/src/main/java/com/arangodb/entity/AqlQueryExplainEntity.java @@ -0,0 +1,147 @@ +/* + * DISCLAIMER + * + * Copyright 2016 ArangoDB GmbH, Cologne, Germany + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Copyright holder is ArangoDB GmbH, Cologne, Germany + */ + +package com.arangodb.entity; + +import com.fasterxml.jackson.annotation.JsonAnySetter; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public final class AqlQueryExplainEntity { + + private ExecutionPlan plan; + private Collection plans; + private Collection warnings; + private ExecutionStats stats; + private Boolean cacheable; + + public ExecutionPlan getPlan() { + return plan; + } + + public Collection getPlans() { + return plans; + } + + public Collection getWarnings() { + return warnings; + } + + public ExecutionStats getStats() { + return stats; + } + + public Boolean getCacheable() { + return cacheable; + } + + public static final class ExecutionPlan { + private final Map properties = new HashMap<>(); + private Collection nodes; + private Double estimatedCost; + private Collection collections; + private Collection rules; + private Collection variables; + + @JsonAnySetter + public void add(String key, Object value) { + properties.put(key, value); + } + + public Object get(String key) { + return properties.get(key); + } + + public Collection getNodes() { + return nodes; + } + + public Double getEstimatedCost() { + return estimatedCost; + } + + public Collection getCollections() { + return collections; + } + + public Collection getRules() { + return rules; + } + + public Collection getVariables() { + return variables; + } + } + + public static final class ExecutionNode { + private final Map properties = new HashMap<>(); + + @JsonAnySetter + public void add(String key, Object value) { + properties.put(key, value); + } + + public Object get(String key) { + return properties.get(key); + } + } + + public static final class ExecutionVariable { + private final Map properties = new HashMap<>(); + + @JsonAnySetter + public void add(String key, Object value) { + properties.put(key, value); + } + + public Object get(String key) { + return properties.get(key); + } + } + + public static final class ExecutionCollection { + private final Map properties = new HashMap<>(); + + @JsonAnySetter + public void add(String key, Object value) { + properties.put(key, value); + } + + public Object get(String key) { + return properties.get(key); + } + } + + public static final class ExecutionStats { + private final Map properties = new HashMap<>(); + + @JsonAnySetter + public void add(String key, Object value) { + properties.put(key, value); + } + + public Object get(String key) { + return properties.get(key); + } + } + +} diff --git a/core/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java b/core/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java index 63fec8e66..3129d06aa 100644 --- a/core/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java +++ b/core/src/main/java/com/arangodb/internal/ArangoDatabaseImpl.java @@ -244,6 +244,11 @@ public AqlExecutionExplainEntity explainQuery( return executorSync().execute(explainQueryRequest(query, bindVars, options), AqlExecutionExplainEntity.class); } + @Override + public AqlQueryExplainEntity explainAqlQuery(String query, Map bindVars, AqlQueryExplainOptions options) { + return executorSync().execute(explainQueryRequest(query, bindVars, options), AqlQueryExplainEntity.class); + } + @Override public AqlParseEntity parseQuery(final String query) { return executorSync().execute(parseQueryRequest(query), AqlParseEntity.class); diff --git a/core/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java b/core/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java index a09889378..a5e4d6a79 100644 --- a/core/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java +++ b/core/src/main/java/com/arangodb/model/AqlQueryExplainOptions.java @@ -110,7 +110,7 @@ public AqlQueryExplainOptions rules(final Collection rules) { return this; } - private Options getOptions() { + public Options getOptions() { if (options == null) { options = new Options(); } @@ -128,9 +128,21 @@ public Optimizer getOptimizer() { } return optimizer; } + + public Integer getMaxNumberOfPlans() { + return maxNumberOfPlans; + } + + public Boolean getAllPlans() { + return allPlans; + } } public static final class Optimizer { private Collection rules; + + public Collection getRules() { + return rules; + } } } diff --git a/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java b/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java index b44ed20bb..833be2150 100644 --- a/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java +++ b/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java @@ -45,6 +45,7 @@ import static org.assertj.core.api.Assertions.catchThrowable; import static org.junit.jupiter.api.Assertions.fail; import static org.junit.jupiter.api.Assumptions.assumeTrue; +import static org.assertj.core.api.InstanceOfAssertFactories.*; /** @@ -1200,6 +1201,115 @@ void explainQueryWithIndexNode(ArangoDatabase db) { }); } + private String getExplainQuery(ArangoDatabase db) { + ArangoCollection character = db.collection("got_characters"); + ArangoCollection actor = db.collection("got_actors"); + + if (!character.exists()) + character.create(); + + if (!actor.exists()) + actor.create(); + + return "FOR `character` IN `got_characters` " + + " FOR `actor` IN `got_actors` " + + " FILTER `actor`.`_id` == @myId" + + " FILTER `character`.`actor` == `actor`.`_id` " + + " FILTER `character`.`value` != 1/0 " + + " RETURN {`character`, `actor`}"; + } + + void checkExecutionPlan(AqlQueryExplainEntity.ExecutionPlan plan) { + assertThat(plan).isNotNull(); + assertThat(plan.get("estimatedNrItems")) + .isInstanceOf(Integer.class) + .asInstanceOf(INTEGER) + .isNotNull() + .isNotNegative(); + assertThat(plan.getNodes()).isNotEmpty(); + + AqlQueryExplainEntity.ExecutionNode node = plan.getNodes().iterator().next(); + assertThat(node.get("estimatedCost")).isNotNull(); + + assertThat(plan.getEstimatedCost()).isNotNull().isNotNegative(); + assertThat(plan.getCollections()).isNotEmpty(); + + AqlQueryExplainEntity.ExecutionCollection collection = plan.getCollections().iterator().next(); + assertThat(collection.get("name")) + .isInstanceOf(String.class) + .asInstanceOf(STRING) + .isNotNull() + .isNotEmpty(); + + assertThat(plan.getRules()).isNotEmpty(); + assertThat(plan.getVariables()).isNotEmpty(); + + AqlQueryExplainEntity.ExecutionVariable variable = plan.getVariables().iterator().next(); + assertThat(variable.get("name")) + .isInstanceOf(String.class) + .asInstanceOf(STRING) + .isNotNull() + .isNotEmpty(); + } + + @ParameterizedTest + @MethodSource("dbs") + void explainAqlQuery(ArangoDatabase db) { + AqlQueryExplainEntity explain = db.explainAqlQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions()); + assertThat(explain).isNotNull(); + + checkExecutionPlan(explain.getPlan()); + assertThat(explain.getPlans()).isNull(); + assertThat(explain.getWarnings()).isNotEmpty(); + + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); + + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().get("executionTime")) + .isInstanceOf(Double.class) + .asInstanceOf(DOUBLE) + .isNotNull() + .isPositive(); + + assertThat(explain.getCacheable()).isFalse(); + } + + @ParameterizedTest + @MethodSource("dbs") + void explainAqlQueryAllPlans(ArangoDatabase db) { + AqlQueryExplainEntity explain = db.explainAqlQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions().allPlans(true)); + assertThat(explain).isNotNull(); + + assertThat(explain.getPlan()).isNull(); + assertThat(explain.getPlans()).allSatisfy(this::checkExecutionPlan); + assertThat(explain.getWarnings()).isNotEmpty(); + + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); + + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().get("executionTime")) + .isInstanceOf(Double.class) + .asInstanceOf(DOUBLE) + .isNotNull() + .isPositive(); + + assertThat(explain.getCacheable()).isNull(); + } + @ParameterizedTest @MethodSource("dbs") void parseQuery(ArangoDatabase db) { From 0245ae8a17fb868b65df87e786784810e7e109d1 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 7 Nov 2024 17:56:00 +0100 Subject: [PATCH 2/4] aligned tests of explainQuery and explainAqlQuery --- .../java/com/arangodb/ArangoDatabaseTest.java | 163 +++++++++--------- 1 file changed, 85 insertions(+), 78 deletions(-) diff --git a/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java b/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java index 833be2150..d041c26ec 100644 --- a/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java +++ b/test-functional/src/test/java/com/arangodb/ArangoDatabaseTest.java @@ -21,7 +21,6 @@ package com.arangodb; import com.arangodb.entity.*; -import com.arangodb.entity.AqlExecutionExplainEntity.ExecutionPlan; import com.arangodb.entity.QueryCachePropertiesEntity.CacheMode; import com.arangodb.model.*; import com.arangodb.util.*; @@ -1126,100 +1125,108 @@ void queryAllowRetryCloseSingleBatch(ArangoDB arangoDB) throws IOException { cursor.close(); } - @ParameterizedTest - @MethodSource("dbs") - void explainQuery(ArangoDatabase db) { - final AqlExecutionExplainEntity explain = db.explainQuery("for i in 1..1 return i", null, null); - assertThat(explain).isNotNull(); - assertThat(explain.getPlan()).isNotNull(); - assertThat(explain.getPlans()).isNull(); - final ExecutionPlan plan = explain.getPlan(); - assertThat(plan.getCollections()).isEmpty(); - assertThat(plan.getEstimatedCost()).isPositive(); - assertThat(plan.getEstimatedNrItems()).isPositive(); - assertThat(plan.getVariables()).hasSize(2); - assertThat(plan.getNodes()).isNotEmpty(); - if (isAtLeastVersion(3, 10)) { - assertThat(explain.getStats().getPeakMemoryUsage()).isNotNull(); - assertThat(explain.getStats().getExecutionTime()).isNotNull(); - } + private String getExplainQuery(ArangoDatabase db) { + ArangoCollection character = db.collection("got_characters"); + ArangoCollection actor = db.collection("got_actors"); + + if (!character.exists()) + character.create(); + + if (!actor.exists()) + actor.create(); + + return "FOR `character` IN `got_characters` " + + " FOR `actor` IN `got_actors` " + + " FILTER `actor`.`_id` == @myId" + + " FILTER `character`.`actor` == `actor`.`_id` " + + " FILTER `character`.`value` != 1/0 " + + " RETURN {`character`, `actor`}"; } - @ParameterizedTest - @MethodSource("dbs") - void explainQueryWithBindVars(ArangoDatabase db) { - final AqlExecutionExplainEntity explain = db.explainQuery("for i in 1..1 return @value", - Collections.singletonMap("value", 11), null); - assertThat(explain).isNotNull(); - assertThat(explain.getPlan()).isNotNull(); - assertThat(explain.getPlans()).isNull(); - final ExecutionPlan plan = explain.getPlan(); - assertThat(plan.getCollections()).isEmpty(); - assertThat(plan.getEstimatedCost()).isPositive(); - assertThat(plan.getEstimatedNrItems()).isPositive(); - assertThat(plan.getVariables()).hasSize(3); + void checkExecutionPlan(AqlExecutionExplainEntity.ExecutionPlan plan) { + assertThat(plan).isNotNull(); + assertThat(plan.getEstimatedNrItems()) + .isNotNull() + .isNotNegative(); assertThat(plan.getNodes()).isNotEmpty(); - } - @ParameterizedTest - @MethodSource("dbs") - void explainQueryWithWarnings(ArangoDatabase db) { - AqlExecutionExplainEntity explain = db.explainQuery("return 1/0", null, null); - assertThat(explain.getWarnings()) - .hasSize(1) - .allSatisfy(w -> { - assertThat(w.getCode()).isEqualTo(1562); - assertThat(w.getMessage()).isEqualTo("division by zero"); - }); + AqlExecutionExplainEntity.ExecutionNode node = plan.getNodes().iterator().next(); + assertThat(node.getEstimatedCost()).isNotNull(); + + assertThat(plan.getEstimatedCost()).isNotNull().isNotNegative(); + assertThat(plan.getCollections()).isNotEmpty(); + + AqlExecutionExplainEntity.ExecutionCollection collection = plan.getCollections().iterator().next(); + assertThat(collection.getName()) + .isNotNull() + .isNotEmpty(); + + assertThat(plan.getRules()).isNotEmpty(); + assertThat(plan.getVariables()).isNotEmpty(); + + AqlExecutionExplainEntity.ExecutionVariable variable = plan.getVariables().iterator().next(); + assertThat(variable.getName()) + .isNotNull() + .isNotEmpty(); } + @SuppressWarnings("deprecation") @ParameterizedTest @MethodSource("dbs") - void explainQueryWithIndexNode(ArangoDatabase db) { - ArangoCollection character = db.collection("got_characters"); - ArangoCollection actor = db.collection("got_actors"); + void explainQuery(ArangoDatabase db) { + AqlExecutionExplainEntity explain = db.explainQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions()); + assertThat(explain).isNotNull(); - if (!character.exists()) - character.create(); + checkExecutionPlan(explain.getPlan()); + assertThat(explain.getPlans()).isNull(); + assertThat(explain.getWarnings()).isNotEmpty(); - if (!actor.exists()) - actor.create(); + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); - String query = "" + - "FOR `character` IN `got_characters` " + - " FOR `actor` IN `got_actors` " + - " FILTER `character`.`actor` == `actor`.`_id` " + - " RETURN `character`"; + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().getExecutionTime()) + .isNotNull() + .isPositive(); - final ExecutionPlan plan = db.explainQuery(query, null, null).getPlan(); - plan.getNodes().stream() - .filter(it -> "IndexNode".equals(it.getType())) - .flatMap(it -> it.getIndexes().stream()) - .forEach(it -> { - assertThat(it.getType()).isEqualTo(IndexType.primary); - assertThat(it.getFields()).contains("_key"); - }); + assertThat(explain.getCacheable()).isFalse(); } - private String getExplainQuery(ArangoDatabase db) { - ArangoCollection character = db.collection("got_characters"); - ArangoCollection actor = db.collection("got_actors"); + @SuppressWarnings("deprecation") + @ParameterizedTest + @MethodSource("dbs") + void explainQueryAllPlans(ArangoDatabase db) { + AqlExecutionExplainEntity explain = db.explainQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions().allPlans(true)); + assertThat(explain).isNotNull(); - if (!character.exists()) - character.create(); + assertThat(explain.getPlan()).isNull(); + assertThat(explain.getPlans()).allSatisfy(this::checkExecutionPlan); + assertThat(explain.getWarnings()).isNotEmpty(); - if (!actor.exists()) - actor.create(); + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); - return "FOR `character` IN `got_characters` " + - " FOR `actor` IN `got_actors` " + - " FILTER `actor`.`_id` == @myId" + - " FILTER `character`.`actor` == `actor`.`_id` " + - " FILTER `character`.`value` != 1/0 " + - " RETURN {`character`, `actor`}"; + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().getExecutionTime()) + .isNotNull() + .isPositive(); + + assertThat(explain.getCacheable()).isNull(); } - void checkExecutionPlan(AqlQueryExplainEntity.ExecutionPlan plan) { + void checkUntypedExecutionPlan(AqlQueryExplainEntity.ExecutionPlan plan) { assertThat(plan).isNotNull(); assertThat(plan.get("estimatedNrItems")) .isInstanceOf(Integer.class) @@ -1261,7 +1268,7 @@ void explainAqlQuery(ArangoDatabase db) { new AqlQueryExplainOptions()); assertThat(explain).isNotNull(); - checkExecutionPlan(explain.getPlan()); + checkUntypedExecutionPlan(explain.getPlan()); assertThat(explain.getPlans()).isNull(); assertThat(explain.getWarnings()).isNotEmpty(); @@ -1291,7 +1298,7 @@ void explainAqlQueryAllPlans(ArangoDatabase db) { assertThat(explain).isNotNull(); assertThat(explain.getPlan()).isNull(); - assertThat(explain.getPlans()).allSatisfy(this::checkExecutionPlan); + assertThat(explain.getPlans()).allSatisfy(this::checkUntypedExecutionPlan); assertThat(explain.getWarnings()).isNotEmpty(); CursorWarning warning = explain.getWarnings().iterator().next(); From f77730e2f0963d7b5c4ee12090ea5e92b5e7ff10 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 7 Nov 2024 18:09:44 +0100 Subject: [PATCH 3/4] added ArangoDatabaseAsync.explainAqlQuery --- .../com/arangodb/ArangoDatabaseAsync.java | 8 + .../internal/ArangoDatabaseAsyncImpl.java | 6 + .../com/arangodb/ArangoDatabaseAsyncTest.java | 221 ++++++++++++++---- 3 files changed, 184 insertions(+), 51 deletions(-) diff --git a/core/src/main/java/com/arangodb/ArangoDatabaseAsync.java b/core/src/main/java/com/arangodb/ArangoDatabaseAsync.java index 6f4c2a366..9ab7fb0c2 100644 --- a/core/src/main/java/com/arangodb/ArangoDatabaseAsync.java +++ b/core/src/main/java/com/arangodb/ArangoDatabaseAsync.java @@ -164,9 +164,17 @@ public interface ArangoDatabaseAsync extends ArangoSerdeAccessor { /** * Asynchronous version of {@link ArangoDatabase#explainQuery(String, Map, AqlQueryExplainOptions)} + * + * @deprecated for removal, use {@link ArangoDatabaseAsync#explainAqlQuery(String, Map, AqlQueryExplainOptions)} instead */ + @Deprecated CompletableFuture explainQuery(String query, Map bindVars, AqlQueryExplainOptions options); + /** + * Asynchronous version of {@link ArangoDatabase#explainAqlQuery(String, Map, AqlQueryExplainOptions)} + */ + CompletableFuture explainAqlQuery(String query, Map bindVars, AqlQueryExplainOptions options); + /** * Asynchronous version of {@link ArangoDatabase#parseQuery(String)} */ diff --git a/core/src/main/java/com/arangodb/internal/ArangoDatabaseAsyncImpl.java b/core/src/main/java/com/arangodb/internal/ArangoDatabaseAsyncImpl.java index cf5ceeecc..490333c5d 100644 --- a/core/src/main/java/com/arangodb/internal/ArangoDatabaseAsyncImpl.java +++ b/core/src/main/java/com/arangodb/internal/ArangoDatabaseAsyncImpl.java @@ -223,6 +223,12 @@ public CompletableFuture explainQuery( return executorAsync().execute(() -> explainQueryRequest(query, bindVars, options), AqlExecutionExplainEntity.class); } + @Override + public CompletableFuture explainAqlQuery( + String query, Map bindVars, AqlQueryExplainOptions options) { + return executorAsync().execute(() -> explainQueryRequest(query, bindVars, options), AqlQueryExplainEntity.class); + } + @Override public CompletableFuture parseQuery(final String query) { return executorAsync().execute(() -> parseQueryRequest(query), AqlParseEntity.class); diff --git a/test-functional/src/test/java/com/arangodb/ArangoDatabaseAsyncTest.java b/test-functional/src/test/java/com/arangodb/ArangoDatabaseAsyncTest.java index 35502380a..e52bb65d7 100644 --- a/test-functional/src/test/java/com/arangodb/ArangoDatabaseAsyncTest.java +++ b/test-functional/src/test/java/com/arangodb/ArangoDatabaseAsyncTest.java @@ -42,6 +42,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; +import static org.assertj.core.api.InstanceOfAssertFactories.*; +import static org.assertj.core.api.InstanceOfAssertFactories.DOUBLE; import static org.junit.jupiter.api.Assumptions.assumeTrue; @@ -1054,79 +1056,196 @@ void queryAllowRetryCloseSingleBatch(ArangoDBAsync arangoDB) throws ExecutionExc cursor.close().get(); } + private String getExplainQuery(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { + ArangoCollectionAsync character = db.collection("got_characters"); + ArangoCollectionAsync actor = db.collection("got_actors"); + + if (!character.exists().get()) + character.create().get(); + + if (!actor.exists().get()) + actor.create().get(); + + return "FOR `character` IN `got_characters` " + + " FOR `actor` IN `got_actors` " + + " FILTER `actor`.`_id` == @myId" + + " FILTER `character`.`actor` == `actor`.`_id` " + + " FILTER `character`.`value` != 1/0 " + + " RETURN {`character`, `actor`}"; + } + + void checkExecutionPlan(AqlExecutionExplainEntity.ExecutionPlan plan) { + assertThat(plan).isNotNull(); + assertThat(plan.getEstimatedNrItems()) + .isNotNull() + .isNotNegative(); + assertThat(plan.getNodes()).isNotEmpty(); + + AqlExecutionExplainEntity.ExecutionNode node = plan.getNodes().iterator().next(); + assertThat(node.getEstimatedCost()).isNotNull(); + + assertThat(plan.getEstimatedCost()).isNotNull().isNotNegative(); + assertThat(plan.getCollections()).isNotEmpty(); + + AqlExecutionExplainEntity.ExecutionCollection collection = plan.getCollections().iterator().next(); + assertThat(collection.getName()) + .isNotNull() + .isNotEmpty(); + + assertThat(plan.getRules()).isNotEmpty(); + assertThat(plan.getVariables()).isNotEmpty(); + + AqlExecutionExplainEntity.ExecutionVariable variable = plan.getVariables().iterator().next(); + assertThat(variable.getName()) + .isNotNull() + .isNotEmpty(); + } + + @SuppressWarnings("deprecation") @ParameterizedTest @MethodSource("asyncDbs") void explainQuery(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { - final AqlExecutionExplainEntity explain = db.explainQuery("for i in 1..1 return i", null, null).get(); + AqlExecutionExplainEntity explain = db.explainQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions()).get(); assertThat(explain).isNotNull(); - assertThat(explain.getPlan()).isNotNull(); + + checkExecutionPlan(explain.getPlan()); assertThat(explain.getPlans()).isNull(); - final ExecutionPlan plan = explain.getPlan(); - assertThat(plan.getCollections()).isEmpty(); - assertThat(plan.getEstimatedCost()).isPositive(); - assertThat(plan.getEstimatedNrItems()).isPositive(); - assertThat(plan.getVariables()).hasSize(2); - assertThat(plan.getNodes()).isNotEmpty(); - if (isAtLeastVersion(3, 10)) { - assertThat(explain.getStats().getPeakMemoryUsage()).isNotNull(); - assertThat(explain.getStats().getExecutionTime()).isNotNull(); - } + assertThat(explain.getWarnings()).isNotEmpty(); + + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); + + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().getExecutionTime()) + .isNotNull() + .isPositive(); + + assertThat(explain.getCacheable()).isFalse(); } + @SuppressWarnings("deprecation") @ParameterizedTest @MethodSource("asyncDbs") - void explainQueryWithBindVars(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { - final AqlExecutionExplainEntity explain = db.explainQuery("for i in 1..1 return @value", - Collections.singletonMap("value", 11), null).get(); + void explainQueryAllPlans(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { + AqlExecutionExplainEntity explain = db.explainQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions().allPlans(true)).get(); assertThat(explain).isNotNull(); - assertThat(explain.getPlan()).isNotNull(); - assertThat(explain.getPlans()).isNull(); - final ExecutionPlan plan = explain.getPlan(); - assertThat(plan.getCollections()).isEmpty(); - assertThat(plan.getEstimatedCost()).isPositive(); - assertThat(plan.getEstimatedNrItems()).isPositive(); - assertThat(plan.getVariables()).hasSize(3); + + assertThat(explain.getPlan()).isNull(); + assertThat(explain.getPlans()).allSatisfy(this::checkExecutionPlan); + assertThat(explain.getWarnings()).isNotEmpty(); + + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); + + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().getExecutionTime()) + .isNotNull() + .isPositive(); + + assertThat(explain.getCacheable()).isNull(); + } + + void checkUntypedExecutionPlan(AqlQueryExplainEntity.ExecutionPlan plan) { + assertThat(plan).isNotNull(); + assertThat(plan.get("estimatedNrItems")) + .isInstanceOf(Integer.class) + .asInstanceOf(INTEGER) + .isNotNull() + .isNotNegative(); assertThat(plan.getNodes()).isNotEmpty(); + + AqlQueryExplainEntity.ExecutionNode node = plan.getNodes().iterator().next(); + assertThat(node.get("estimatedCost")).isNotNull(); + + assertThat(plan.getEstimatedCost()).isNotNull().isNotNegative(); + assertThat(plan.getCollections()).isNotEmpty(); + + AqlQueryExplainEntity.ExecutionCollection collection = plan.getCollections().iterator().next(); + assertThat(collection.get("name")) + .isInstanceOf(String.class) + .asInstanceOf(STRING) + .isNotNull() + .isNotEmpty(); + + assertThat(plan.getRules()).isNotEmpty(); + assertThat(plan.getVariables()).isNotEmpty(); + + AqlQueryExplainEntity.ExecutionVariable variable = plan.getVariables().iterator().next(); + assertThat(variable.get("name")) + .isInstanceOf(String.class) + .asInstanceOf(STRING) + .isNotNull() + .isNotEmpty(); } @ParameterizedTest @MethodSource("asyncDbs") - void explainQueryWithWarnings(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { - AqlExecutionExplainEntity explain = db.explainQuery("return 1/0", null, null).get(); - assertThat(explain.getWarnings()) - .hasSize(1) - .allSatisfy(w -> { - assertThat(w.getCode()).isEqualTo(1562); - assertThat(w.getMessage()).isEqualTo("division by zero"); - }); + void explainAqlQuery(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { + AqlQueryExplainEntity explain = db.explainAqlQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions()).get(); + assertThat(explain).isNotNull(); + + checkUntypedExecutionPlan(explain.getPlan()); + assertThat(explain.getPlans()).isNull(); + assertThat(explain.getWarnings()).isNotEmpty(); + + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); + + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().get("executionTime")) + .isInstanceOf(Double.class) + .asInstanceOf(DOUBLE) + .isNotNull() + .isPositive(); + + assertThat(explain.getCacheable()).isFalse(); } @ParameterizedTest @MethodSource("asyncDbs") - void explainQueryWithIndexNode(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { - ArangoCollectionAsync character = db.collection("got_characters"); - ArangoCollectionAsync actor = db.collection("got_actors"); + void explainAqlQueryAllPlans(ArangoDatabaseAsync db) throws ExecutionException, InterruptedException { + AqlQueryExplainEntity explain = db.explainAqlQuery( + getExplainQuery(db), + Collections.singletonMap("myId", "123"), + new AqlQueryExplainOptions().allPlans(true)).get(); + assertThat(explain).isNotNull(); - if (!character.exists().get()) - character.create().get(); + assertThat(explain.getPlan()).isNull(); + assertThat(explain.getPlans()).allSatisfy(this::checkUntypedExecutionPlan); + assertThat(explain.getWarnings()).isNotEmpty(); - if (!actor.exists().get()) - actor.create().get(); + CursorWarning warning = explain.getWarnings().iterator().next(); + assertThat(warning).isNotNull(); + assertThat(warning.getCode()).isEqualTo(1562); + assertThat(warning.getMessage()).contains("division by zero"); + + assertThat(explain.getStats()).isNotNull(); + + assertThat(explain.getStats().get("executionTime")) + .isInstanceOf(Double.class) + .asInstanceOf(DOUBLE) + .isNotNull() + .isPositive(); - String query = "" + - "FOR `character` IN `got_characters` " + - " FOR `actor` IN `got_actors` " + - " FILTER `character`.`actor` == `actor`.`_id` " + - " RETURN `character`"; - - final ExecutionPlan plan = db.explainQuery(query, null, null).get().getPlan(); - plan.getNodes().stream() - .filter(it -> "IndexNode".equals(it.getType())) - .flatMap(it -> it.getIndexes().stream()) - .forEach(it -> { - assertThat(it.getType()).isEqualTo(IndexType.primary); - assertThat(it.getFields()).contains("_key"); - }); + assertThat(explain.getCacheable()).isNull(); } @ParameterizedTest From fd3d0a370fb0321f5b13147ff31c4135136a4047 Mon Sep 17 00:00:00 2001 From: Michele Rastelli Date: Thu, 7 Nov 2024 18:24:54 +0100 Subject: [PATCH 4/4] updated native image metadata --- .../arangodb-java-driver/reflect-config.json | 182 +++++++++++------- .../reflect-config.json | 182 +++++++++++------- 2 files changed, 218 insertions(+), 146 deletions(-) diff --git a/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/reflect-config.json b/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/reflect-config.json index a25499327..aeeb8de38 100644 --- a/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/reflect-config.json +++ b/driver/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver/reflect-config.json @@ -270,13 +270,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", + "name": "com.arangodb.entity.arangosearch.ConsolidationType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.ConsolidationType", + "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -318,13 +318,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.CursorEntity", + "name": "com.arangodb.entity.arangosearch.analyzer.GeoPointAnalyzerProperties", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.GeoPointAnalyzerProperties", + "name": "com.arangodb.entity.CursorEntity", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -377,6 +377,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionStats", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.arangosearch.analyzer.StopwordsAnalyzerProperties", "allDeclaredFields": true, @@ -437,12 +443,24 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionVariable", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.TransactionEntity", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.ArangoDBEngine", "allDeclaredFields": true, @@ -462,13 +480,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.AqlExecutionExplainEntity$ExecutionStats", + "name": "com.arangodb.entity.arangosearch.analyzer.DelimiterAnalyzerProperties", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.DelimiterAnalyzerProperties", + "name": "com.arangodb.entity.AqlExecutionExplainEntity$ExecutionStats", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -479,6 +497,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionNode", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.AqlParseEntity$AstNode", "allDeclaredFields": true, @@ -563,6 +587,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.arangosearch.ConsolidationPolicy", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.arangosearch.analyzer.MinHashAnalyzerProperties", "allDeclaredFields": true, @@ -570,7 +600,7 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.ConsolidationPolicy", + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionPlan", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -581,6 +611,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionCollection", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.KeyOptions", "allDeclaredFields": true, @@ -618,13 +654,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.StreamTransactionEntity", + "name": "com.arangodb.entity.arangosearch.analyzer.WildcardAnalyzerProperties", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.WildcardAnalyzerProperties", + "name": "com.arangodb.entity.StreamTransactionEntity", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1038,13 +1074,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", + "name": "com.arangodb.entity.arangosearch.ConsolidationType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.ConsolidationType", + "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1055,6 +1091,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.model.TransactionalOptions", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.model.IndexOptions", "allDeclaredFields": true, @@ -1140,19 +1182,19 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionDropOptions", + "name": "com.arangodb.model.CollectionCountOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.LogLevelOptions", + "name": "com.arangodb.model.DocumentDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DBCreateOptions", + "name": "com.arangodb.model.EdgeDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1164,313 +1206,313 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.AqlFunctionDeleteOptions", + "name": "com.arangodb.model.EdgeReplaceOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.AnalyzerDeleteOptions", + "name": "com.arangodb.model.VertexReplaceOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.UserUpdateOptions", + "name": "com.arangodb.model.DocumentUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.StreamTransactionOptions", + "name": "com.arangodb.model.GraphDocumentReadOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentReplaceOptions", + "name": "com.arangodb.model.EdgeUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DatabaseUsersOptions", + "name": "com.arangodb.model.VertexUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ViewRenameOptions", + "name": "com.arangodb.model.DocumentExistsOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.SearchAliasPropertiesOptions", + "name": "com.arangodb.model.DocumentReplaceOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeCollectionDropOptions", + "name": "com.arangodb.model.VertexDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionCreateOptions", + "name": "com.arangodb.model.EdgeCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.AqlQueryExplainOptions$Options", + "name": "com.arangodb.model.CollectionTruncateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ViewCreateOptions", + "name": "com.arangodb.model.DocumentCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionCreateOptions$Options", + "name": "com.arangodb.model.VertexCollectionDropOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.ArangoSearchOptionsBuilder", + "name": "com.arangodb.model.LogLevelOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.AqlQueryParseOptions", + "name": "com.arangodb.model.DBCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.UserAccessOptions", + "name": "com.arangodb.model.AqlFunctionDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ComputedValue", + "name": "com.arangodb.model.arangosearch.AnalyzerDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeCollectionRemoveOptions", + "name": "com.arangodb.model.StreamTransactionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions", + "name": "com.arangodb.model.UserUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeUpdateOptions", + "name": "com.arangodb.model.DatabaseUsersOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionCreateOptions", + "name": "com.arangodb.model.ViewRenameOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.ArangoSearchCreateOptions", + "name": "com.arangodb.model.arangosearch.SearchAliasPropertiesOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexDeleteOptions", + "name": "com.arangodb.model.EdgeCollectionDropOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeCreateOptions", + "name": "com.arangodb.model.CollectionCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.GraphCreateOptions", + "name": "com.arangodb.model.AqlQueryExplainOptions$Options", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionsReadOptions", + "name": "com.arangodb.model.ViewCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.TransactionOptions", + "name": "com.arangodb.model.VertexCollectionCreateOptions$Options", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionTruncateOptions", + "name": "com.arangodb.model.arangosearch.ArangoSearchOptionsBuilder", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionSchema", + "name": "com.arangodb.model.AqlQueryParseOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentImportOptions", + "name": "com.arangodb.model.UserAccessOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentDeleteOptions", + "name": "com.arangodb.model.ComputedValue", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeReplaceOptions", + "name": "com.arangodb.model.EdgeCollectionRemoveOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexReplaceOptions", + "name": "com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.GraphDocumentReadOptions", + "name": "com.arangodb.model.VertexCollectionCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentUpdateOptions", + "name": "com.arangodb.model.arangosearch.ArangoSearchCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexUpdateOptions", + "name": "com.arangodb.model.GraphCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.OptionsBuilder", + "name": "com.arangodb.model.CollectionsReadOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.TransactionCollectionOptions", + "name": "com.arangodb.model.TransactionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.LogOptions", + "name": "com.arangodb.model.DocumentImportOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ReplaceEdgeDefinitionOptions", + "name": "com.arangodb.model.CollectionSchema", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.UserCreateOptions", + "name": "com.arangodb.model.OptionsBuilder", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionPropertiesOptions", + "name": "com.arangodb.model.TransactionCollectionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DatabaseOptions", + "name": "com.arangodb.model.ReplaceEdgeDefinitionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionRemoveOptions", + "name": "com.arangodb.model.LogOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentCreateOptions", + "name": "com.arangodb.model.CollectionPropertiesOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.GraphCreateOptions$SmartOptions", + "name": "com.arangodb.model.UserCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionCountOptions", + "name": "com.arangodb.model.DatabaseOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeDeleteOptions", + "name": "com.arangodb.model.VertexCollectionRemoveOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.SearchAliasOptionsBuilder", + "name": "com.arangodb.model.GraphCreateOptions$SmartOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionRenameOptions", + "name": "com.arangodb.model.arangosearch.SearchAliasOptionsBuilder", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.SearchAliasCreateOptions", + "name": "com.arangodb.model.CollectionRenameOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentExistsOptions", + "name": "com.arangodb.model.arangosearch.SearchAliasCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1481,12 +1523,6 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, - { - "name": "com.arangodb.model.AqlQueryOptionsTest", - "allDeclaredFields": true, - "allDeclaredMethods": true, - "allDeclaredConstructors": true - }, { "name": "com.arangodb.model.AqlFunctionCreateOptions", "allDeclaredFields": true, @@ -1607,4 +1643,4 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true } -] +] \ No newline at end of file diff --git a/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/reflect-config.json b/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/reflect-config.json index a25499327..aeeb8de38 100644 --- a/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/reflect-config.json +++ b/shaded/src/main/resources/META-INF/native-image/com.arangodb/arangodb-java-driver-shaded/reflect-config.json @@ -270,13 +270,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", + "name": "com.arangodb.entity.arangosearch.ConsolidationType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.ConsolidationType", + "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -318,13 +318,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.CursorEntity", + "name": "com.arangodb.entity.arangosearch.analyzer.GeoPointAnalyzerProperties", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.GeoPointAnalyzerProperties", + "name": "com.arangodb.entity.CursorEntity", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -377,6 +377,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionStats", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.arangosearch.analyzer.StopwordsAnalyzerProperties", "allDeclaredFields": true, @@ -437,12 +443,24 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionVariable", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.TransactionEntity", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.ArangoDBEngine", "allDeclaredFields": true, @@ -462,13 +480,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.AqlExecutionExplainEntity$ExecutionStats", + "name": "com.arangodb.entity.arangosearch.analyzer.DelimiterAnalyzerProperties", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.DelimiterAnalyzerProperties", + "name": "com.arangodb.entity.AqlExecutionExplainEntity$ExecutionStats", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -479,6 +497,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionNode", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.AqlParseEntity$AstNode", "allDeclaredFields": true, @@ -563,6 +587,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.arangosearch.ConsolidationPolicy", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.arangosearch.analyzer.MinHashAnalyzerProperties", "allDeclaredFields": true, @@ -570,7 +600,7 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.ConsolidationPolicy", + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionPlan", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -581,6 +611,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.entity.AqlQueryExplainEntity$ExecutionCollection", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.entity.KeyOptions", "allDeclaredFields": true, @@ -618,13 +654,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.StreamTransactionEntity", + "name": "com.arangodb.entity.arangosearch.analyzer.WildcardAnalyzerProperties", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.WildcardAnalyzerProperties", + "name": "com.arangodb.entity.StreamTransactionEntity", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1038,13 +1074,13 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", + "name": "com.arangodb.entity.arangosearch.ConsolidationType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.entity.arangosearch.ConsolidationType", + "name": "com.arangodb.entity.arangosearch.analyzer.GeoS2AnalyzerProperties$GeoS2AnalyzerType", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1055,6 +1091,12 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, + { + "name": "com.arangodb.model.TransactionalOptions", + "allDeclaredFields": true, + "allDeclaredMethods": true, + "allDeclaredConstructors": true + }, { "name": "com.arangodb.model.IndexOptions", "allDeclaredFields": true, @@ -1140,19 +1182,19 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionDropOptions", + "name": "com.arangodb.model.CollectionCountOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.LogLevelOptions", + "name": "com.arangodb.model.DocumentDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DBCreateOptions", + "name": "com.arangodb.model.EdgeDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1164,313 +1206,313 @@ "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.AqlFunctionDeleteOptions", + "name": "com.arangodb.model.EdgeReplaceOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.AnalyzerDeleteOptions", + "name": "com.arangodb.model.VertexReplaceOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.UserUpdateOptions", + "name": "com.arangodb.model.DocumentUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.StreamTransactionOptions", + "name": "com.arangodb.model.GraphDocumentReadOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentReplaceOptions", + "name": "com.arangodb.model.EdgeUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DatabaseUsersOptions", + "name": "com.arangodb.model.VertexUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ViewRenameOptions", + "name": "com.arangodb.model.DocumentExistsOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.SearchAliasPropertiesOptions", + "name": "com.arangodb.model.DocumentReplaceOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeCollectionDropOptions", + "name": "com.arangodb.model.VertexDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionCreateOptions", + "name": "com.arangodb.model.EdgeCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.AqlQueryExplainOptions$Options", + "name": "com.arangodb.model.CollectionTruncateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ViewCreateOptions", + "name": "com.arangodb.model.DocumentCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionCreateOptions$Options", + "name": "com.arangodb.model.VertexCollectionDropOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.ArangoSearchOptionsBuilder", + "name": "com.arangodb.model.LogLevelOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.AqlQueryParseOptions", + "name": "com.arangodb.model.DBCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.UserAccessOptions", + "name": "com.arangodb.model.AqlFunctionDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ComputedValue", + "name": "com.arangodb.model.arangosearch.AnalyzerDeleteOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeCollectionRemoveOptions", + "name": "com.arangodb.model.StreamTransactionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions", + "name": "com.arangodb.model.UserUpdateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeUpdateOptions", + "name": "com.arangodb.model.DatabaseUsersOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionCreateOptions", + "name": "com.arangodb.model.ViewRenameOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.ArangoSearchCreateOptions", + "name": "com.arangodb.model.arangosearch.SearchAliasPropertiesOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexDeleteOptions", + "name": "com.arangodb.model.EdgeCollectionDropOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeCreateOptions", + "name": "com.arangodb.model.CollectionCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.GraphCreateOptions", + "name": "com.arangodb.model.AqlQueryExplainOptions$Options", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionsReadOptions", + "name": "com.arangodb.model.ViewCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.TransactionOptions", + "name": "com.arangodb.model.VertexCollectionCreateOptions$Options", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionTruncateOptions", + "name": "com.arangodb.model.arangosearch.ArangoSearchOptionsBuilder", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionSchema", + "name": "com.arangodb.model.AqlQueryParseOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentImportOptions", + "name": "com.arangodb.model.UserAccessOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentDeleteOptions", + "name": "com.arangodb.model.ComputedValue", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeReplaceOptions", + "name": "com.arangodb.model.EdgeCollectionRemoveOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexReplaceOptions", + "name": "com.arangodb.model.arangosearch.ArangoSearchPropertiesOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.GraphDocumentReadOptions", + "name": "com.arangodb.model.VertexCollectionCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentUpdateOptions", + "name": "com.arangodb.model.arangosearch.ArangoSearchCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexUpdateOptions", + "name": "com.arangodb.model.GraphCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.OptionsBuilder", + "name": "com.arangodb.model.CollectionsReadOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.TransactionCollectionOptions", + "name": "com.arangodb.model.TransactionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.LogOptions", + "name": "com.arangodb.model.DocumentImportOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.ReplaceEdgeDefinitionOptions", + "name": "com.arangodb.model.CollectionSchema", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.UserCreateOptions", + "name": "com.arangodb.model.OptionsBuilder", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionPropertiesOptions", + "name": "com.arangodb.model.TransactionCollectionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DatabaseOptions", + "name": "com.arangodb.model.ReplaceEdgeDefinitionOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.VertexCollectionRemoveOptions", + "name": "com.arangodb.model.LogOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentCreateOptions", + "name": "com.arangodb.model.CollectionPropertiesOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.GraphCreateOptions$SmartOptions", + "name": "com.arangodb.model.UserCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionCountOptions", + "name": "com.arangodb.model.DatabaseOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.EdgeDeleteOptions", + "name": "com.arangodb.model.VertexCollectionRemoveOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.SearchAliasOptionsBuilder", + "name": "com.arangodb.model.GraphCreateOptions$SmartOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.CollectionRenameOptions", + "name": "com.arangodb.model.arangosearch.SearchAliasOptionsBuilder", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.arangosearch.SearchAliasCreateOptions", + "name": "com.arangodb.model.CollectionRenameOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true }, { - "name": "com.arangodb.model.DocumentExistsOptions", + "name": "com.arangodb.model.arangosearch.SearchAliasCreateOptions", "allDeclaredFields": true, "allDeclaredMethods": true, "allDeclaredConstructors": true @@ -1481,12 +1523,6 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true }, - { - "name": "com.arangodb.model.AqlQueryOptionsTest", - "allDeclaredFields": true, - "allDeclaredMethods": true, - "allDeclaredConstructors": true - }, { "name": "com.arangodb.model.AqlFunctionCreateOptions", "allDeclaredFields": true, @@ -1607,4 +1643,4 @@ "allDeclaredMethods": true, "allDeclaredConstructors": true } -] +] \ No newline at end of file