diff --git a/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/Vertices.java b/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/Vertices.java index bf231ca90a..d5be694893 100644 --- a/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/Vertices.java +++ b/hugegraph-server/hugegraph-api/src/main/java/org/apache/hugegraph/api/traversers/Vertices.java @@ -26,6 +26,7 @@ import org.apache.hugegraph.HugeGraph; import org.apache.hugegraph.backend.id.Id; import org.apache.hugegraph.backend.query.ConditionQuery; +import org.apache.hugegraph.schema.SchemaLabel; import org.apache.hugegraph.structure.HugeVertex; import org.apache.hugegraph.traversal.optimize.TraversalUtil; import org.apache.hugegraph.type.HugeType; @@ -51,6 +52,10 @@ public Iterator vertices(HugeGraph g) { this.label == null), "No source vertices provided"); Iterator iterator; if (this.ids != null && !this.ids.isEmpty()) { + E.checkArgument(this.label == null, + "Just provide one of ids or label of source vertices"); + E.checkArgument(props == null || props.isEmpty(), + "Just provide one of ids or properties of source vertices"); List sourceIds = new ArrayList<>(this.ids.size()); for (Object id : this.ids) { sourceIds.add(HugeVertex.getIdValue(id)); @@ -62,7 +67,7 @@ public Iterator vertices(HugeGraph g) { } else { ConditionQuery query = new ConditionQuery(HugeType.VERTEX); if (this.label != null) { - Id label = g.vertexLabel(this.label).id(); + Id label = SchemaLabel.getVertexLabelId(g, this.label); query.eq(HugeKeys.LABEL, label); } if (props != null && !props.isEmpty()) { diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/AbstractAlgorithm.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/AbstractAlgorithm.java index 0e249ebe25..b30d3ac83a 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/AbstractAlgorithm.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/AbstractAlgorithm.java @@ -379,7 +379,7 @@ protected Iterator vertices(Object label, long limit) { ConditionQuery query = new ConditionQuery(HugeType.VERTEX); query.capacity(Query.NO_CAPACITY); query.limit(limit); - query.eq(HugeKeys.LABEL, this.getVertexLabelId(label)); + query.eq(HugeKeys.LABEL, this.getVertexLabelIdOrNull(label)); return this.graph().vertices(query); } diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/BetweennessCentralityAlgorithmV2.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/BetweennessCentralityAlgorithmV2.java index d33dc54eb8..bc4c3ae378 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/BetweennessCentralityAlgorithmV2.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/BetweennessCentralityAlgorithmV2.java @@ -26,6 +26,7 @@ import org.apache.hugegraph.backend.query.Query; import org.apache.hugegraph.job.UserJob; import org.apache.hugegraph.job.algorithm.BfsTraverser; +import org.apache.hugegraph.schema.SchemaLabel; import org.apache.hugegraph.structure.HugeVertex; import org.apache.hugegraph.traversal.algorithm.HugeTraverser; import org.apache.hugegraph.type.define.Directions; @@ -80,10 +81,7 @@ private Object betweenessCentrality(Directions direction, assert topN >= 0L || topN == NO_LIMIT; this.globalBetweennesses = new HashMap<>(); - Id edgeLabelId = null; - if (label != null) { - edgeLabelId = this.graph().edgeLabel(label).id(); - } + Id edgeLabelId = this.getEdgeLabelIdOrNull(label); // TODO: sample the startVertices Iterator startVertices = this.vertices(sourceLabel, diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/ClosenessCentralityAlgorithmV2.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/ClosenessCentralityAlgorithmV2.java index e95eae587c..1519a2a456 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/ClosenessCentralityAlgorithmV2.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/ClosenessCentralityAlgorithmV2.java @@ -81,10 +81,7 @@ private Object closenessCentrality(Directions direction, assert degree > 0L || degree == NO_LIMIT; assert topN >= 0L || topN == NO_LIMIT; - Id edgeLabelId = null; - if (label != null) { - edgeLabelId = this.graph().edgeLabel(label).id(); - } + Id edgeLabelId = this.getEdgeLabelIdOrNull(label); // TODO: sample the startVertices Iterator startVertices = this.vertices(sourceLabel, diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/DegreeCentralityAlgorithm.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/DegreeCentralityAlgorithm.java index 5a995d6dd7..19e68c0531 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/DegreeCentralityAlgorithm.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/DegreeCentralityAlgorithm.java @@ -73,7 +73,7 @@ public Object degreeCentrality(Directions direction, JsonMap degrees = new JsonMap(); TopMap tops = new TopMap<>(topN); Id vertex = null; - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); long degree = 0L; long totalEdges = 0L; diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/StressCentralityAlgorithmV2.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/StressCentralityAlgorithmV2.java index 5817e03867..d1c3da6d8d 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/StressCentralityAlgorithmV2.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/cent/StressCentralityAlgorithmV2.java @@ -60,7 +60,7 @@ public Object call(UserJob job, Map parameters) { private static class Traverser extends BfsTraverser { - private Map globalStresses; + private final Map globalStresses; private Traverser(UserJob job) { super(job); @@ -80,10 +80,7 @@ private Object stressCentrality(Directions direction, assert degree > 0L || degree == NO_LIMIT; assert topN >= 0L || topN == NO_LIMIT; - Id edgeLabelId = null; - if (label != null) { - edgeLabelId = this.graph().edgeLabel(label).id(); - } + Id edgeLabelId = this.getEdgeLabelIdOrNull(label); // TODO: sample the startVertices Iterator startVertices = this.vertices(sourceLabel, diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/comm/LpaAlgorithm.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/comm/LpaAlgorithm.java index 289ebca04c..4b2e30db3e 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/comm/LpaAlgorithm.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/job/algorithm/comm/LpaAlgorithm.java @@ -178,7 +178,7 @@ private String voteCommunityOfVertex(Vertex vertex, String edgeLabel, Directions dir, long degree) { // neighbors of source vertex v Id source = (Id) vertex.id(); - Id labelId = this.getEdgeLabelId(edgeLabel); + Id labelId = this.getEdgeLabelIdOrNull(edgeLabel); Iterator neighbors = this.adjacentVertices(source, dir, labelId, degree); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/schema/SchemaLabel.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/schema/SchemaLabel.java index e20a3f89dc..09de43e2d8 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/schema/SchemaLabel.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/schema/SchemaLabel.java @@ -177,4 +177,12 @@ public static Id getLabelId(HugeGraph graph, HugeType type, Object label) { label.getClass()); } } + + public static Id getVertexLabelId(HugeGraph graph, Object label) { + return SchemaLabel.getLabelId(graph, HugeType.VERTEX, label); + } + + public static Id getEdgeLabelId(HugeGraph graph, Object label) { + return SchemaLabel.getLabelId(graph, HugeType.EDGE, label); + } } diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/FusiformSimilarityTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/FusiformSimilarityTraverser.java index 55ee91b561..741a6ef6fe 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/FusiformSimilarityTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/FusiformSimilarityTraverser.java @@ -112,7 +112,7 @@ private Set fusiformSimilarityForVertex( // Ignore current vertex if its neighbors number is not enough return ImmutableSet.of(); } - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); // Get similar nodes and counts Iterator edges = this.edgesOfVertex(vertex.id(), direction, labelId, degree); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/HugeTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/HugeTraverser.java index e75d016359..57c7c0a31d 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/HugeTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/HugeTraverser.java @@ -620,18 +620,18 @@ protected long edgesCount(Id source, EdgeStep edgeStep) { } } - protected Object getVertexLabelId(Object label) { + protected Object getVertexLabelIdOrNull(Object label) { if (label == null) { return null; } - return SchemaLabel.getLabelId(this.graph, HugeType.VERTEX, label); + return SchemaLabel.getVertexLabelId(this.graph, label); } - protected Id getEdgeLabelId(Object label) { + protected Id getEdgeLabelIdOrNull(Object label) { if (label == null) { return null; } - return SchemaLabel.getLabelId(this.graph, HugeType.EDGE, label); + return SchemaLabel.getEdgeLabelId(this.graph, label); } protected void checkVertexExist(Id vertexId, String name) { diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/JaccardSimilarTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/JaccardSimilarTraverser.java index 51c81b9e10..296e89ad40 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/JaccardSimilarTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/JaccardSimilarTraverser.java @@ -54,7 +54,7 @@ public double jaccardSimilarity(Id vertex, Id other, Directions dir, E.checkNotNull(dir, "direction"); checkDegree(degree); - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); Set sourceNeighbors = IteratorUtils.set(this.adjacentVertices( vertex, dir, labelId, degree)); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KneighborTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KneighborTraverser.java index cc2a3990af..2b284b26a0 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KneighborTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KneighborTraverser.java @@ -46,7 +46,7 @@ public Set kneighbor(Id sourceV, Directions dir, checkDegree(degree); checkLimit(limit); - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); KneighborRecords records = new KneighborRecords(true, sourceV, true); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KoutTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KoutTraverser.java index 61ec0a4b6c..8cf3c15b7e 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KoutTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/KoutTraverser.java @@ -58,7 +58,7 @@ public Set kout(Id sourceV, Directions dir, String label, capacity, limit); } - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); Set sources = newIdSet(); Set neighbors = newIdSet(); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PathsTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PathsTraverser.java index 76c2fa6a91..5746533a50 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PathsTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PathsTraverser.java @@ -59,7 +59,7 @@ public PathSet paths(Id sourceV, Directions sourceDir, return PathSet.EMPTY; } - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); Traverser traverser = new Traverser(sourceV, targetV, labelId, degree, capacity, limit); // We should stop early if walk backtrace or reach limit diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PersonalRankTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PersonalRankTraverser.java index 972eff7c7a..2c3bafa238 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PersonalRankTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/PersonalRankTraverser.java @@ -55,7 +55,7 @@ public Map personalRank(Id source, String label, Map ranks = newMap(); ranks.put(source, 1.0); - Id labelId = this.graph().edgeLabel(label).id(); + Id labelId = this.getEdgeLabelIdOrNull(label); Directions dir = this.getStartDirection(source, label); Set outSeeds = newIdSet(); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SameNeighborTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SameNeighborTraverser.java index 036ec551cd..af16231015 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SameNeighborTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SameNeighborTraverser.java @@ -45,7 +45,7 @@ public Set sameNeighbors(Id vertex, Id other, Directions direction, checkDegree(degree); checkLimit(limit); - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); Set sourceNeighbors = IteratorUtils.set(this.adjacentVertices( vertex, direction, labelId, degree)); @@ -80,7 +80,7 @@ public Set sameNeighbors(List vertexIds, Directions direction, List labelsId = new ArrayList<>(); if (labels != null) { for (String label : labels) { - labelsId.add(this.getEdgeLabelId(label)); + labelsId.add(this.getEdgeLabelIdOrNull(label)); } } diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/ShortestPathTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/ShortestPathTraverser.java index a34f87289d..4a2f3259d5 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/ShortestPathTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/ShortestPathTraverser.java @@ -61,7 +61,7 @@ public Path shortestPath(Id sourceV, Id targetV, Directions dir, Map labelMap = newMap(labels.size()); for (String label : labels) { - labelMap.put(this.getEdgeLabelId(label), label); + labelMap.put(this.getEdgeLabelIdOrNull(label), label); } Traverser traverser = new Traverser(sourceV, targetV, dir, labelMap, degree, skipDegree, capacity); @@ -122,7 +122,7 @@ public PathSet allShortestPaths(Id sourceV, Id targetV, Directions dir, Map labelMap = newMap(labels.size()); for (String label : labels) { - labelMap.put(this.getEdgeLabelId(label), label); + labelMap.put(this.getEdgeLabelIdOrNull(label), label); } Traverser traverser = new Traverser(sourceV, targetV, dir, labelMap, degree, skipDegree, capacity); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SingleSourceShortestPathTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SingleSourceShortestPathTraverser.java index ead4365a9b..0c67228abf 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SingleSourceShortestPathTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SingleSourceShortestPathTraverser.java @@ -58,7 +58,7 @@ public WeightedPaths singleSourceShortestPaths(Id sourceV, Directions dir, checkSkipDegree(skipDegree, degree, capacity); checkLimit(limit); - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); Traverser traverser = new Traverser(sourceV, dir, labelId, weight, degree, skipDegree, capacity, limit); while (true) { @@ -94,7 +94,7 @@ public NodeWithWeight weightedShortestPath(Id sourceV, Id targetV, checkCapacity(capacity); checkSkipDegree(skipDegree, degree, capacity); - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); Traverser traverser = new Traverser(sourceV, dir, labelId, weight, degree, skipDegree, capacity, NO_LIMIT); diff --git a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SubGraphTraverser.java b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SubGraphTraverser.java index d5c49eacda..f76f3e3771 100644 --- a/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SubGraphTraverser.java +++ b/hugegraph-server/hugegraph-core/src/main/java/org/apache/hugegraph/traversal/algorithm/SubGraphTraverser.java @@ -81,7 +81,7 @@ private PathSet subGraphPaths(Id sourceV, Directions dir, String label, checkCapacity(capacity); checkLimit(limit); - Id labelId = this.getEdgeLabelId(label); + Id labelId = this.getEdgeLabelIdOrNull(label); Traverser traverser = new Traverser(sourceV, labelId, depth, degree, capacity, limit, rings, sourceInRing);