use of com.alibaba.maxgraph.compiler.logical.function.ProcessorFunction in project GraphScope by alibaba.
the class BarrierTreeNode method buildLogicalQueryPlan.
@Override
public LogicalSubQueryPlan buildLogicalQueryPlan(ContextManager contextManager) {
Message.Value.Builder argumentBuilder = Message.Value.newBuilder();
int maxBarrierSize = ReflectionUtils.getFieldValue(NoOpBarrierStep.class, barrierStep, "maxBarrierSize");
argumentBuilder.setIntValue(maxBarrierSize);
ProcessorFunction processorFunction = new ProcessorFunction(QueryFlowOuterClass.OperatorType.BARRIER, argumentBuilder);
return parseSingleUnaryVertex(contextManager.getVertexIdManager(), contextManager.getTreeNodeLabelManager(), processorFunction, contextManager);
}
use of com.alibaba.maxgraph.compiler.logical.function.ProcessorFunction in project GraphScope by alibaba.
the class LogicalPlanBuilder method buildLabelValuePlan.
private void buildLabelValuePlan(LogicalQueryPlan queryPlan, ContextManager contextManager, GraphSchema schema, LogicalVertex outputVertex, TreeNodeLabelManager treeNodeLabelManager, VertexIdManager vertexIdManager, CostMappingManager costMappingManager, String field, TreeNode currNode) {
// Create field value here
String parentField = costMappingManager.getValueParent(field);
if (!StringUtils.isEmpty(parentField)) {
BaseTreeNode nextNode = (BaseTreeNode) currNode.getOutputNode();
nextNode.removeBeforeLabel(parentField);
// If the field is value field, process it and remove the label requirement in vertex
int labelIndex = treeNodeLabelManager.getLabelIndex(parentField);
TreeNode fieldValueTreeNode = costMappingManager.getComputeTreeByValue(parentField);
if (!(fieldValueTreeNode instanceof SourceTreeNode)) {
for (QueryFlowOuterClass.RequirementValue.Builder reqValue : outputVertex.getAfterRequirementList()) {
if (reqValue.getReqType() == QueryFlowOuterClass.RequirementType.LABEL_START) {
List<Integer> labelIndexList = reqValue.getReqArgumentBuilder().getIntValueListList().stream().filter(v -> v != labelIndex).collect(Collectors.toList());
reqValue.getReqArgumentBuilder().clearIntValueList().addAllIntValueList(labelIndexList);
}
}
TreeNode currentFilterTreeNode = TreeNodeUtils.buildSingleOutputNode(fieldValueTreeNode, schema);
// build filter plan, and use join direct filter vertex to filter left stream
LogicalSubQueryPlan fieldValuePlan = TreeNodeUtils.buildSubQueryPlan(currentFilterTreeNode, outputVertex, contextManager);
List<LogicalVertex> fieldValueVertexList = fieldValuePlan.getLogicalVertexList();
if (fieldValueVertexList.size() == 2) {
LogicalVertex fieldValueVertex = fieldValueVertexList.get(1);
ProcessorLabelValueFunction labelValueFunction = new ProcessorLabelValueFunction(labelIndex, fieldValueVertex);
LogicalVertex labelValueVertex = new LogicalUnaryVertex(vertexIdManager.getId(), labelValueFunction, outputVertex);
queryPlan.addLogicalVertex(labelValueVertex);
queryPlan.addLogicalEdge(outputVertex, labelValueVertex, LogicalEdge.shuffleByKey(labelIndex));
} else {
LogicalVertex fieldValueVertex = fieldValuePlan.getOutputVertex();
fieldValueVertex.getAfterRequirementList().add(QueryFlowOuterClass.RequirementValue.newBuilder().setReqType(QueryFlowOuterClass.RequirementType.LABEL_START).setReqArgument(Message.Value.newBuilder().addIntValueList(labelIndex)));
queryPlan.mergeLogicalQueryPlan(fieldValuePlan);
LogicalVertex outputKeyVertex = new LogicalUnaryVertex(vertexIdManager.getId(), new ProcessorFunction(QueryFlowOuterClass.OperatorType.KEY_MESSAGE), fieldValueVertex);
queryPlan.addLogicalVertex(outputKeyVertex);
queryPlan.addLogicalEdge(fieldValueVertex, outputKeyVertex, LogicalEdge.forwardEdge());
}
}
}
}
use of com.alibaba.maxgraph.compiler.logical.function.ProcessorFunction in project GraphScope by alibaba.
the class PropertyKeyValueTreeNode method buildLogicalQueryPlan.
@Override
public LogicalSubQueryPlan buildLogicalQueryPlan(ContextManager contextManager) {
TreeNodeLabelManager labelManager = contextManager.getTreeNodeLabelManager();
VertexIdManager vertexIdManager = contextManager.getVertexIdManager();
Message.Value.Builder argumentBuilder = Message.Value.newBuilder().setIntValue(propKeyValueType.getNumber());
ProcessorFunction processorFunction = new ProcessorFunction(QueryFlowOuterClass.OperatorType.PROP_KEY_VALUE, argumentBuilder);
return parseSingleUnaryVertex(vertexIdManager, labelManager, processorFunction, contextManager);
}
use of com.alibaba.maxgraph.compiler.logical.function.ProcessorFunction in project GraphScope by alibaba.
the class PropertyMapTreeNode method buildLogicalQueryPlan.
@Override
public LogicalSubQueryPlan buildLogicalQueryPlan(ContextManager contextManager) {
TreeNodeLabelManager labelManager = contextManager.getTreeNodeLabelManager();
VertexIdManager vertexIdManager = contextManager.getVertexIdManager();
Message.Value.Builder argumentBuilder = Message.Value.newBuilder().setBoolValue(includeTokens).setIntValue(propertyType == PropertyType.PROPERTY ? Message.PropertyType.PROP_TYPE_VALUE : Message.PropertyType.VALUE_TYPE_VALUE).setBoolFlag(edgePropFlag());
if (null != propertyKeys) {
Arrays.stream(propertyKeys).forEach(v -> argumentBuilder.addIntValueList(SchemaUtils.getPropId(v, schema)));
}
ProcessorFunction processorFunction = new ProcessorFunction(QueryFlowOuterClass.OperatorType.PROP_MAP_VALUE, argumentBuilder);
return parseSingleUnaryVertex(vertexIdManager, labelManager, processorFunction, contextManager);
}
use of com.alibaba.maxgraph.compiler.logical.function.ProcessorFunction in project GraphScope by alibaba.
the class RangeLocalTreeNode method buildLogicalQueryPlan.
@Override
public LogicalSubQueryPlan buildLogicalQueryPlan(ContextManager contextManager) {
TreeNodeLabelManager labelManager = contextManager.getTreeNodeLabelManager();
VertexIdManager vertexIdManager = contextManager.getVertexIdManager();
Message.Value.Builder argumentBuilder = Message.Value.newBuilder().addLongValueList(low).addLongValueList(high);
ProcessorFunction processorFunction = new ProcessorFunction(QueryFlowOuterClass.OperatorType.RANGE_LOCAL, argumentBuilder);
return parseSingleUnaryVertex(vertexIdManager, labelManager, processorFunction, contextManager);
}
Aggregations