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


Reply via email to