AbstractOperator constructFilter(Map<String, Integer>
vertexVariableOrderIndexMapBeforeProjection, Map<String, Integer>
edgeVariableOrderIndexMap, AbstractOperator nextOperator) {
List<EdgeOrVertexPropertyDescriptor> edgeOrVertexPropertyDescriptors = new ArrayList<>();
// The {@code descriptorIndexMap} holds the position of the descriptor for a given
// variable in {@code edgeOrVertexPropertyDescriptors} list. A map is used to prevent
// duplicate descriptors in the list.
Map<String, Integer> descriptorIndexMap = new HashMap<>();
for (QueryPredicate queryPredicate : structuredQuery.
getEdgeLiteralAndNonLiteralPredicates()) {
for (Pair<String, String> variable : queryPredicate.getAllVariables()) {
if (null == descriptorIndexMap.get(variable.a + '.' + variable.b)) {
descriptorIndexMap.put(variable.a + '.' + variable.b,
edgeOrVertexPropertyDescriptors.size());
edgeOrVertexPropertyDescriptors.add(getEdgeOrVertexPropertyDescriptor(
vertexVariableOrderIndexMapBeforeProjection, edgeVariableOrderIndexMap,
variable.a, typeAndPropertyKeyStore.mapStringPropertyKeyToShort(
variable.b)));
}
}
}
Predicate<String []> predicate = PredicateFactory.getFilterPredicate(structuredQuery.
getEdgeLiteralAndNonLiteralPredicates(), descriptorIndexMap);
return new Filter(nextOperator, predicate, edgeOrVertexPropertyDescriptors,
structuredQuery.getEdgeLiteralAndNonLiteralPredicates());
}
OneTimeMatchQueryPlanner.java 文件源码
java
阅读 17
收藏 0
点赞 0
评论 0
项目:graphflow
作者:
评论列表
文章目录