This is an automated email from the ASF dual-hosted git repository.
jermy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-hugegraph.git
The following commit(s) were added to refs/heads/master by this push:
new 6c3170c49 chore: fix TinkerPop unit test (#2055)
6c3170c49 is described below
commit 6c3170c496c241f27c57eb97c87b43bb21162b5c
Author: vaughn <[email protected]>
AuthorDate: Mon Dec 26 22:41:46 2022 +0800
chore: fix TinkerPop unit test (#2055)
* chore: don't support persistence for memory backend
* chore: setup graph by first step graph when graph is null
* chore: apply relations optimize logic
* chore: don't support null properties
* fix: g.V().has(empty).count() and g.V().count().as('a').select('a')
* fix: specify the code generation directory for raft.proto (#2057)
* fix: tinkerpop unit schema no define
* fix the style & clean some outdated code
Co-authored-by: Simon Cheung <[email protected]>
Co-authored-by: imbajin <[email protected]>
---
.github/{workflows => outdated}/release.yml | 6 +-
.github/workflows/ci.yml | 14 +---
.../org/apache/hugegraph/StandardHugeGraph.java | 4 +-
.../backend/query/ConditionQueryFlatten.java | 51 +++++++++----
.../apache/hugegraph/structure/HugeFeatures.java | 10 +++
.../traversal/optimize/HugeCountStepStrategy.java | 1 +
.../traversal/optimize/HugeGraphStep.java | 10 ++-
.../traversal/optimize/HugeGraphStepStrategy.java | 3 +
.../traversal/optimize/TraversalUtil.java | 87 +++++++++++++++++++---
.../org/apache/hugegraph/core/MultiGraphsTest.java | 46 +++++-------
.../org/apache/hugegraph/tinkerpop/TestGraph.java | 25 +++++--
.../src/main/resources/fast-methods.filter | 1 +
hugegraph-test/src/main/resources/methods.filter | 1 +
13 files changed, 174 insertions(+), 85 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/outdated/release.yml
similarity index 93%
rename from .github/workflows/release.yml
rename to .github/outdated/release.yml
index 5ba24bec2..771ece85f 100644
--- a/.github/workflows/release.yml
+++ b/.github/outdated/release.yml
@@ -17,20 +17,20 @@ jobs:
distribution: 'zulu'
- name: Cache Maven packages
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Checkout
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Package
run: |
- mvn clean package -DskipTests
+ mvn clean package -DskipTests -ntp
- name: Rename file
if: contains(env.TAG_NAME, "-")
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 17236051f..c142d2c1e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -37,7 +37,7 @@ jobs:
distribution: 'zulu'
- name: Cache Maven packages
- uses: actions/cache@v2
+ uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@@ -68,18 +68,6 @@ jobs:
java-version: ${{ matrix.JAVA_VERSION }}
distribution: 'zulu'
-# - name: Init MySQL Env
-# if: ${{ env.BACKEND == 'mysql' }}
-# uses: mirromutth/[email protected]
-# with:
-# host port: 3306 # Optional, default value is 3306. The port of host
-# container port: 3306 # Optional, default value is 3306. The port of
container
-# character set server: 'utf8mb4' # Optional, default value is
'utf8mb4'. The '--character-set-server' option for mysqld
-# collation server: 'utf8mb4_general_ci' # Optional, default value is
'utf8mb4_general_ci'. The '--collation-server' option for mysqld
-# mysql version: '5.7' # Optional, default value is "latest". The
version of the MySQL
-# mysql database: 'test' # Optional, default value is "test". The
specified database which will be create
-# mysql root password: "******" # Required if "mysql user" is empty,
default is empty. The root superuser password
-
- name: Run unit test
run: |
$TRAVIS_DIR/run-unit-test.sh $BACKEND
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/StandardHugeGraph.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/StandardHugeGraph.java
index 22504c267..e7c265084 100644
--- a/hugegraph-core/src/main/java/org/apache/hugegraph/StandardHugeGraph.java
+++ b/hugegraph-core/src/main/java/org/apache/hugegraph/StandardHugeGraph.java
@@ -193,8 +193,6 @@ public class StandardHugeGraph implements HugeGraph {
this.taskManager = TaskManager.instance();
- this.features = new HugeFeatures(this, true);
-
this.name = config.get(CoreOptions.STORE);
this.started = false;
this.closed = false;
@@ -214,6 +212,8 @@ public class StandardHugeGraph implements HugeGraph {
try {
this.tx = new TinkerPopTransaction(this);
+ boolean supportsPersistence =
this.backendStoreFeatures().supportsPersistence();
+ this.features = new HugeFeatures(this, supportsPersistence);
SnowflakeIdGenerator.init(this.params);
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/backend/query/ConditionQueryFlatten.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/backend/query/ConditionQueryFlatten.java
index 487270ed7..be432be2c 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/backend/query/ConditionQueryFlatten.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/backend/query/ConditionQueryFlatten.java
@@ -35,13 +35,14 @@ import org.apache.hugegraph.type.define.HugeKeys;
import org.apache.hugegraph.util.E;
import org.apache.hugegraph.util.InsertionOrderUtil;
import org.apache.hugegraph.util.NumericUtil;
+
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
public final class ConditionQueryFlatten {
private static final Set<HugeKeys> SPECIAL_KEYS = ImmutableSet.of(
- HugeKeys.LABEL
+ HugeKeys.LABEL
);
public static List<ConditionQuery> flatten(ConditionQuery query) {
@@ -51,7 +52,7 @@ public final class ConditionQueryFlatten {
public static List<ConditionQuery> flatten(ConditionQuery query,
boolean supportIn) {
if (query.isFlattened() && !query.mayHasDupKeys(SPECIAL_KEYS)) {
- return ImmutableList.of(query);
+ return flattenRelations(query);
}
List<ConditionQuery> queries = new ArrayList<>();
@@ -123,8 +124,8 @@ public final class ConditionQueryFlatten {
return new Condition.Or(flattenIn(or.left(), supportIn),
flattenIn(or.right(), supportIn));
default:
- throw new AssertionError(String.format(
- "Wrong condition type: '%s'", condition.type()));
+ throw new AssertionError(String.format("Wrong condition type:
'%s'",
+ condition.type()));
}
}
@@ -144,8 +145,7 @@ public final class ConditionQueryFlatten {
(key == HugeKeys.OWNER_VERTEX || key == HugeKeys.ID)) {
// TODO: Should not rely on HugeKeys here, improve key judgment
// Just mark flatten
- return new Condition.FlattenSyspropRelation(
- (SyspropRelation) relation);
+ return new Condition.FlattenSyspropRelation((SyspropRelation)
relation);
}
// Do IN flatten, return null if values.size() == 0
@@ -214,8 +214,8 @@ public final class ConditionQueryFlatten {
flattenAndOr(or.right()));
break;
default:
- throw new AssertionError(String.format(
- "Wrong condition type: '%s'", condition.type()));
+ throw new AssertionError(String.format("Wrong condition type:
'%s'",
+ condition.type()));
}
return result;
}
@@ -251,6 +251,25 @@ public final class ConditionQueryFlatten {
return cq;
}
+ private static List<ConditionQuery> flattenRelations(ConditionQuery query)
{
+ Relations relations = new Relations();
+ List<Condition> nonRelations = new ArrayList<>();
+ for (Condition condition : query.conditions()) {
+ if (condition.isRelation()) {
+ relations.add((Relation) condition);
+ } else {
+ nonRelations.add(condition);
+ }
+ }
+ relations = optimizeRelations(relations);
+ if (relations != null) {
+ ConditionQuery cq = newQueryFromRelations(query, relations);
+ cq.query(nonRelations);
+ return ImmutableList.of(cq);
+ }
+ return ImmutableList.of(query);
+ }
+
private static Relations optimizeRelations(Relations relations) {
// Optimize and-relations in one query
// e.g. (age>1 and age>2) -> (age>2)
@@ -289,8 +308,9 @@ public final class ConditionQueryFlatten {
/**
* Reduce and merge relations linked with 'AND' for same key
- * @param relations linked with 'AND' having same key, may contains 'in',
- * 'not in', '>', '<', '>=', '<=', '==', '!='
+ *
+ * @param relations linked with 'AND' having same key, may contain 'in',
'not in',
+ * '>', '<', '>=', '<=', '==', '!='
* @return merged relations
*/
private static Relations mergeRelations(Relations relations) {
@@ -410,8 +430,8 @@ public final class ConditionQueryFlatten {
return true;
}
return compare(low, high) < 0 || compare(low, high) == 0 &&
- low.relation() == Condition.RelationType.GTE &&
- high.relation() == Condition.RelationType.LTE;
+ low.relation() ==
Condition.RelationType.GTE &&
+ high.relation() ==
Condition.RelationType.LTE;
}
private static boolean validEq(Relation eq, Relation low, Relation high) {
@@ -460,8 +480,7 @@ public final class ConditionQueryFlatten {
return selectRelation(first, second, false);
}
- private static Relation selectRelation(Relation first, Relation second,
- boolean high) {
+ private static Relation selectRelation(Relation first, Relation second,
boolean high) {
if (first == null) {
return second;
}
@@ -491,8 +510,8 @@ public final class ConditionQueryFlatten {
} else if (firstValue instanceof Date && secondValue instanceof Date) {
return ((Date) firstValue).compareTo((Date) secondValue);
} else {
- throw new IllegalArgumentException(String.format(
- "Can't compare between %s and %s", first, second));
+ throw new IllegalArgumentException(String.format("Can't compare
between %s and %s",
+ first, second));
}
}
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/structure/HugeFeatures.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/structure/HugeFeatures.java
index 85517c9d6..5fddd2303 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/structure/HugeFeatures.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/structure/HugeFeatures.java
@@ -271,6 +271,11 @@ public class HugeFeatures implements Graph.Features {
return VertexProperty.Cardinality.single;
}
+ @Override
+ public boolean supportsNullPropertyValues() {
+ return false;
+ }
+
public boolean supportsDefaultLabel() {
return true;
}
@@ -291,6 +296,11 @@ public class HugeFeatures implements Graph.Features {
public EdgePropertyFeatures properties() {
return this.edgePropertyFeatures;
}
+
+ @Override
+ public boolean supportsNullPropertyValues() {
+ return false;
+ }
}
public class HugeDataTypeFeatures implements DataTypeFeatures {
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeCountStepStrategy.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeCountStepStrategy.java
index 699f32640..5bde0e454 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeCountStepStrategy.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeCountStepStrategy.java
@@ -104,6 +104,7 @@ public final class HugeCountStepStrategy
graphStep.queryInfo().aggregate(Aggregate.AggregateFunc.COUNT, null);
HugeCountStep<?> countStep = new HugeCountStep<>(traversal, graphStep);
for (Step<?, ?> origin : originSteps) {
+ TraversalHelper.copyLabels(origin, countStep, false);
traversal.removeStep(origin);
}
traversal.addStep(0, countStep);
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStep.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStep.java
index 2df10354a..04e4bfa6f 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStep.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStep.java
@@ -72,6 +72,10 @@ public final class HugeGraphStep<S, E extends Element>
}
protected long count() {
+ if (this.ids == null) {
+ return 0L;
+ }
+
if (this.returnsVertex()) {
return this.verticesCount();
} else {
@@ -144,14 +148,13 @@ public final class HugeGraphStep<S, E extends Element>
}
private Query makeQuery(HugeGraph graph, HugeType type) {
- Query query = null;
+ Query query;
if (this.hasContainers.isEmpty()) {
// Query all
query = new Query(type);
} else {
ConditionQuery q = new ConditionQuery(type);
- query = TraversalUtil.fillConditionQuery(q, this.hasContainers,
- graph);
+ query = TraversalUtil.fillConditionQuery(q, this.hasContainers,
graph);
}
query = this.injectQueryInfo(query);
@@ -198,6 +201,7 @@ public final class HugeGraphStep<S, E extends Element>
return this.lastTimeResults;
}
+ @Override
public boolean equals(Object obj) {
if (!(obj instanceof HugeGraphStep)) {
return false;
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStepStrategy.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStepStrategy.java
index bea1f19ae..baa1946c5 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStepStrategy.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/HugeGraphStepStrategy.java
@@ -54,6 +54,9 @@ public final class HugeGraphStepStrategy
List<GraphStep> steps = TraversalHelper.getStepsOfClass(
GraphStep.class, traversal);
for (GraphStep originStep : steps) {
+ TraversalUtil.trySetGraph(originStep,
+ TraversalUtil.tryGetGraph(steps.get(0)));
+
HugeGraphStep<?, ?> newStep = new HugeGraphStep<>(originStep);
TraversalHelper.replaceStep(originStep, newStep, traversal);
diff --git
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java
index d43dcb951..fa0922683 100644
---
a/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java
+++
b/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/optimize/TraversalUtil.java
@@ -25,6 +25,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.function.BiPredicate;
import java.util.function.Function;
import java.util.regex.Matcher;
@@ -54,6 +55,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.HasContainerHolder;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
import
org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
@@ -105,12 +107,61 @@ public final class TraversalUtil {
}
public static HugeGraph tryGetGraph(Step<?, ?> step) {
- Graph graph = step.getTraversal().getGraph().get();
- if (graph instanceof HugeGraph) {
- return (HugeGraph) graph;
+ // TODO: remove these EmptyGraph judgments when upgrade tinkerpop
(refer-tinkerpop#1699)
+ Optional<Graph> graph = step.getTraversal()
+ .getGraph()
+ .filter(g -> !(g instanceof EmptyGraph));
+ if (!graph.isPresent()) {
+ TraversalParent parent = step.getTraversal().getParent();
+ if (parent instanceof Traversal) {
+ Optional<Graph> parentGraph;
+ parentGraph = ((Traversal<?, ?>) parent).asAdmin()
+ .getGraph()
+ .filter(g -> !(g
instanceof EmptyGraph));
+ if (parentGraph.isPresent()) {
+ step.getTraversal().setGraph(parentGraph.get());
+ return (HugeGraph) parentGraph.get();
+ }
+ }
+
+ return null;
}
- assert graph == null || graph instanceof EmptyGraph;
- return null;
+
+ assert graph.get() instanceof HugeGraph;
+ return (HugeGraph) graph.get();
+ }
+
+ public static void trySetGraph(Step<?, ?> step, HugeGraph graph) {
+ if (graph == null || step == null || step.getTraversal() == null) {
+ return;
+ }
+
+ // TODO: remove these EmptyGraph judgments when upgrade tinkerpop
(refer-tinkerpop#1699)
+ Optional<Graph> stepGraph = step.getTraversal()
+ .getGraph()
+ .filter(g -> !(g instanceof
EmptyGraph));
+
+ if (step instanceof TraversalParent) {
+ for (final Traversal.Admin<?, ?> local : ((TraversalParent)
step).getLocalChildren()) {
+ if (local.getGraph().filter(g -> !(g instanceof
EmptyGraph)).isPresent()) {
+ continue;
+ }
+ local.setGraph(graph);
+ }
+ for (final Traversal.Admin<?, ?> global : ((TraversalParent)
step).getGlobalChildren()) {
+ if (global.getGraph().filter(g -> !(g instanceof
EmptyGraph)).isPresent()) {
+ continue;
+ }
+ global.setGraph(graph);
+ }
+ }
+
+ if (stepGraph.isPresent()) {
+ assert stepGraph.get() instanceof HugeGraph;
+ return;
+ }
+
+ step.getTraversal().setGraph(graph);
}
public static void extractHasContainer(HugeGraphStep<?, ?> newStep,
@@ -154,7 +205,6 @@ public final class TraversalUtil {
step = step.getNextStep();
if (step instanceof OrderGlobalStep) {
QueryHolder holder = (QueryHolder) newStep;
- @SuppressWarnings("resource")
OrderGlobalStep<?, ?> orderStep = (OrderGlobalStep<?, ?>) step;
orderStep.getComparators().forEach(comp -> {
ElementValueComparator<?> comparator =
@@ -225,7 +275,6 @@ public final class TraversalUtil {
do {
step = step.getNextStep();
if (step instanceof PropertiesStep) {
- @SuppressWarnings("resource")
PropertiesStep<?> propStep = (PropertiesStep<?>) step;
if (propStep.getReturnType() == PropertyType.VALUE &&
propStep.getPropertyKeys().length == 1) {
@@ -580,14 +629,29 @@ public final class TraversalUtil {
List<HasStep> steps =
TraversalHelper.getStepsOfAssignableClassRecursively(
HasStep.class, traversal);
+
+ if (steps.isEmpty()) {
+ return;
+ }
+
/*
* The graph in traversal may be null, for example:
* `g.V().hasLabel('person').union(__.has('name', 'tom'))`
* Here `__.has()` will create a new traversal, but the graph is null
*/
- if (steps.isEmpty() || !traversal.getGraph().isPresent()) {
- return;
+ if (!traversal.getGraph().filter(g -> !(g instanceof
EmptyGraph)).isPresent()) {
+ if (traversal.getParent() == null || !(traversal.getParent()
instanceof Traversal)) {
+ return;
+ }
+
+ Optional<Graph> parentGraph = ((Traversal<?, ?>)
traversal.getParent())
+
.asAdmin()
+
.getGraph();
+ if (parentGraph.filter(g -> !(g instanceof
EmptyGraph)).isPresent()) {
+ traversal.setGraph(parentGraph.get());
+ }
}
+
HugeGraph graph = (HugeGraph) traversal.getGraph().get();
for (HasStep<?> step : steps) {
TraversalUtil.convHasStep(graph, step);
@@ -603,7 +667,7 @@ public final class TraversalUtil {
private static void convPredicateValue(HugeGraph graph,
HasContainer has) {
- // No need to convert if key is sysprop
+ // No need to convert if key is sys-prop
if (isSysProp(has.getKey())) {
return;
}
@@ -719,8 +783,7 @@ public final class TraversalUtil {
public static void retrieveSysprop(List<HasContainer> hasContainers,
Function<HasContainer, Boolean> func) {
- for (Iterator<HasContainer> iter = hasContainers.iterator();
- iter.hasNext();) {
+ for (Iterator<HasContainer> iter = hasContainers.iterator();
iter.hasNext();) {
HasContainer container = iter.next();
if (container.getKey().startsWith("~") && func.apply(container)) {
iter.remove();
diff --git
a/hugegraph-test/src/main/java/org/apache/hugegraph/core/MultiGraphsTest.java
b/hugegraph-test/src/main/java/org/apache/hugegraph/core/MultiGraphsTest.java
index cef98c397..dbf644420 100644
---
a/hugegraph-test/src/main/java/org/apache/hugegraph/core/MultiGraphsTest.java
+++
b/hugegraph-test/src/main/java/org/apache/hugegraph/core/MultiGraphsTest.java
@@ -53,8 +53,7 @@ import com.google.common.collect.ImmutableList;
public class MultiGraphsTest extends BaseCoreTest {
- private static final String NAME48 =
- "g12345678901234567890123456789012345678901234567";
+ private static final String NAME48 =
"g12345678901234567890123456789012345678901234567";
@Test
public void testWriteAndReadVersion() {
@@ -233,16 +232,12 @@ public class MultiGraphsTest extends BaseCoreTest {
@Test
public void testCreateGraphsWithInvalidNames() {
- List<String> invalidNames = ImmutableList.of(
- "", " ", " g", "g 1", " .", ". .",
- "@", "$", "%", "^", "&", "*", "(", ")",
- "_", "+", "`", "-", "=", "{", "}", "|",
- "[", "]", "\"", "<", "?", ";", "'", "~",
- ",", ".", "/", "\\",
- "~g", "g~", "g'",
- "_1", "_a",
- "1a", "123",
- NAME48 + "8");
+ List<String> invalidNames = ImmutableList.of("", " ", " g", "g 1", "
.", ". .",
+ "@", "$", "%", "^", "&",
"*", "(", ")",
+ "_", "+", "`", "-", "=",
"{", "}", "|",
+ "[", "]", "\"", "<", "?",
";", "'", "~",
+ ",", ".", "/", "\\",
"~g", "g~", "g'",
+ "_1", "_a", "1a", "123",
NAME48 + "8");
for (String name : invalidNames) {
Assert.assertThrows(RuntimeException.class, () ->
openGraphs(name));
}
@@ -267,8 +262,7 @@ public class MultiGraphsTest extends BaseCoreTest {
() -> g2.vertexLabel("node"));
Assert.assertThrows(IllegalArgumentException.class,
() -> g3.vertexLabel("node"));
- g1.schema().vertexLabel("node").useCustomizeNumberId()
- .ifNotExist().create();
+
g1.schema().vertexLabel("node").useCustomizeNumberId().ifNotExist().create();
g2.vertexLabel("node");
g3.vertexLabel("node");
@@ -294,13 +288,11 @@ public class MultiGraphsTest extends BaseCoreTest {
}
@Test
- public void testCreateGraphWithSameNameDifferentBackends()
- throws Exception {
+ public void testCreateGraphWithSameNameDifferentBackends() throws
Exception {
HugeGraph g1 = openGraphWithBackend("graph", "memory", "text");
g1.initBackend();
Assert.assertThrows(RuntimeException.class,
- () -> openGraphWithBackend("graph", "rocksdb",
- "binary"));
+ () -> openGraphWithBackend("graph", "rocksdb",
"binary"));
g1.clearBackend();
g1.close();
}
@@ -323,17 +315,15 @@ public class MultiGraphsTest extends BaseCoreTest {
@Test
public void testCreateGraphsWithMultiDisksForRocksDB() {
- HugeGraph g1 = openGraphWithBackend(
- "g1", "rocksdb", "binary",
- "rocksdb.data_disks",
- "[g/secondary_index:rocksdb-index1," +
- " g/range_int_index:rocksdb-index1," +
- " g/range_long_index:rocksdb-index2]");
+ HugeGraph g1 = openGraphWithBackend("g1", "rocksdb", "binary",
"rocksdb.data_disks",
+
"[g/secondary_index:rocksdb-index1," +
+ "
g/range_int_index:rocksdb-index1," +
+ "
g/range_long_index:rocksdb-index2]");
g1.initBackend();
g1.clearBackend();
final HugeGraph[] g2 = new HugeGraph[1];
- Assert.assertThrows(ConnectionException.class, () -> {
+ Assert.assertThrows(RuntimeException.class, () -> {
g2[0] = openGraphWithBackend("g2", "rocksdb", "binary",
"rocksdb.data_disks",
"[g/range_int_index:rocksdb-index1]");
@@ -348,7 +338,7 @@ public class MultiGraphsTest extends BaseCoreTest {
});
final HugeGraph[] g3 = new HugeGraph[1];
- Assert.assertThrows(ConnectionException.class, () -> {
+ Assert.assertThrows(RuntimeException.class, () -> {
g3[0] = openGraphWithBackend("g3", "rocksdb", "binary",
"rocksdb.data_disks",
"[g/secondary_index:/]");
@@ -388,7 +378,7 @@ public class MultiGraphsTest extends BaseCoreTest {
Configuration config = buildConfig(graph);
config.setProperty(CoreOptions.BACKEND.name(), backend);
config.setProperty(CoreOptions.SERIALIZER.name(), serializer);
- for (int i = 0; i < configs.length;) {
+ for (int i = 0; i < configs.length; ) {
config.setProperty(configs[i++], configs[i++]);
}
return ((HugeGraph) GraphFactory.open(config));
@@ -397,7 +387,7 @@ public class MultiGraphsTest extends BaseCoreTest {
private static Configuration buildConfig(String graphName) {
PropertiesConfiguration conf = Utils.getConf();
Configuration config = new BaseConfiguration();
- for (Iterator<String> keys = conf.getKeys(); keys.hasNext();) {
+ for (Iterator<String> keys = conf.getKeys(); keys.hasNext(); ) {
String key = keys.next();
config.setProperty(key, conf.getProperty(key));
}
diff --git
a/hugegraph-test/src/main/java/org/apache/hugegraph/tinkerpop/TestGraph.java
b/hugegraph-test/src/main/java/org/apache/hugegraph/tinkerpop/TestGraph.java
index 9eadc72dd..21a82b3fe 100644
--- a/hugegraph-test/src/main/java/org/apache/hugegraph/tinkerpop/TestGraph.java
+++ b/hugegraph-test/src/main/java/org/apache/hugegraph/tinkerpop/TestGraph.java
@@ -457,6 +457,7 @@ public class TestGraph implements Graph {
schema.propertyKey("ripple").ifNotExist().create();
schema.propertyKey("lop").ifNotExist().create();
schema.propertyKey("test").ifNotExist().create();
+ schema.propertyKey("p").ifNotExist().create();
switch (idStrategy) {
case AUTOMATIC:
@@ -475,8 +476,8 @@ public class TestGraph implements Graph {
.nullableKeys("name")
.ifNotExist().create();
schema.vertexLabel(DEFAULT_VL)
- .properties("name", "age")
- .nullableKeys("name", "age")
+ .properties("name", "age", "p")
+ .nullableKeys("name", "age", "p")
.ifNotExist().create();
schema.vertexLabel("animal")
.properties("name", "age", "peter", "josh", "marko",
@@ -499,8 +500,8 @@ public class TestGraph implements Graph {
.nullableKeys("name")
.useCustomizeStringId().ifNotExist().create();
schema.vertexLabel(DEFAULT_VL)
- .properties("name", "age")
- .nullableKeys("name", "age")
+ .properties("name", "age", "p")
+ .nullableKeys("name", "age", "p")
.useCustomizeStringId().ifNotExist().create();
schema.vertexLabel("animal")
.properties("name", "age")
@@ -557,6 +558,8 @@ public class TestGraph implements Graph {
.range().ifNotExist().create();
schema.indexLabel("personByNameAge").onV("person").by("name", "age")
.ifNotExist().create();
+ schema.indexLabel("vertexByP").onV("vertex").by("p")
+ .ifNotExist().create();
}
@Watched
@@ -659,6 +662,8 @@ public class TestGraph implements Graph {
schema.propertyKey("f").asFloat().ifNotExist().create();
schema.propertyKey("i").asInt().ifNotExist().create();
schema.propertyKey("l").asLong().ifNotExist().create();
+ schema.propertyKey("p").ifNotExist().create();
+ schema.propertyKey("k").ifNotExist().create();
schema.propertyKey("here").ifNotExist().create();
schema.propertyKey("to-change").ifNotExist().create();
schema.propertyKey("to-remove").ifNotExist().create();
@@ -704,7 +709,7 @@ public class TestGraph implements Graph {
"favoriteColor", "aKey", "age", "boolean",
"float", "double", "string", "integer",
"long", "myId", "location", "x", "y", "s",
- "n", "d", "f", "i", "l", "to-change",
+ "n", "d", "f", "i", "l", "p", "k",
"to-change",
"to-remove", "to-keep", "old", "new",
"gremlin.partitionGraphStrategy.partition",
"color", "blah")
@@ -714,7 +719,7 @@ public class TestGraph implements Graph {
"favoriteColor", "aKey", "age", "boolean",
"float", "double", "string", "integer",
"long", "myId", "location", "x", "y", "s",
- "n", "d", "f", "i", "l", "to-change",
+ "n", "d", "f", "i", "l", "p", "k",
"to-change",
"to-remove", "to-keep", "old", "new",
"gremlin.partitionGraphStrategy.partition",
"color", "blah")
@@ -729,7 +734,7 @@ public class TestGraph implements Graph {
"favoriteColor", "aKey", "age", "boolean",
"float", "double", "string", "integer",
"long", "myId", "location", "x", "y", "s",
- "n", "d", "f", "i", "l", "to-change",
+ "n", "d", "f", "i", "l", "p", "k",
"to-change",
"to-remove", "to-keep", "old", "new",
"gremlin.partitionGraphStrategy.partition",
"color", "blah")
@@ -739,7 +744,7 @@ public class TestGraph implements Graph {
"favoriteColor", "aKey", "age", "boolean",
"float", "double", "string", "integer",
"long", "myId", "location", "x", "y", "s",
- "n", "d", "f", "i", "l", "to-change",
+ "n", "d", "f", "i", "l", "p", "k",
"to-change",
"to-remove", "to-keep", "old", "new",
"gremlin.partitionGraphStrategy.partition",
"color", "blah")
@@ -754,6 +759,10 @@ public class TestGraph implements Graph {
.ifNotExist().create();
schema.indexLabel("defaultVLByName").onV(defaultVL).by("name")
.ifNotExist().create();
+ schema.indexLabel("defaultVLBySome").onV(defaultVL).by("some")
+ .ifNotExist().create();
+ schema.indexLabel("defaultVLByK").onV(defaultVL).by("k")
+ .ifNotExist().create();
}
@Watched
diff --git a/hugegraph-test/src/main/resources/fast-methods.filter
b/hugegraph-test/src/main/resources/fast-methods.filter
index fa5231062..85f099a46 100644
--- a/hugegraph-test/src/main/resources/fast-methods.filter
+++ b/hugegraph-test/src/main/resources/fast-methods.filter
@@ -165,6 +165,7 @@
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_V_hasXname_not_endingWithXasXX:
Unsupported predicate 'notEndingWith(as)'
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_V_hasXage_withoutX27_29X_count:
Unsupported relation 'NEQ'
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_V_hasXname_gtXmX_andXcontainingXoXXX:
Unsupported predicate 'containing(o)'
+org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.g_V_hasXp_neqXvXX:
Unsupported relation 'NEQ'
# Unsupport edge label 'created': 'software' -> 'person', has existed an
edgelabel (created: person -> software) in this case
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeTest.Traversals.g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX:
Unsupport edge from inV to outV
diff --git a/hugegraph-test/src/main/resources/methods.filter
b/hugegraph-test/src/main/resources/methods.filter
index b106cb9e7..d32d3126e 100644
--- a/hugegraph-test/src/main/resources/methods.filter
+++ b/hugegraph-test/src/main/resources/methods.filter
@@ -128,6 +128,7 @@
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_V_hasXname_not_endingWithXasXX:
Unsupported predicate 'notEndingWith(as)'
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_V_hasXage_withoutX27_29X_count:
Unsupported relation 'NEQ'
org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.Traversals.g_V_hasXname_gtXmX_andXcontainingXoXXX:
Unsupported predicate 'containing(o)'
+org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTest.g_V_hasXp_neqXvXX:
Unsupported relation 'NEQ'
# Unsupport edge label 'created': 'software' -> 'person', has existed an
edgelabel (created: person -> software) in this case
org.apache.tinkerpop.gremlin.process.traversal.step.map.AddEdgeTest.Traversals.g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX:
Unsupport edge from inV to outV